Quelltext /~heha/ewa/Ofen/prozess.zip/msvc/prozess/vector.h

#pragma once
// Nachbau von std::vector ohne Allocator, minimalistisch
// hier fest verdrahtet auf C-Funktion realloc()

namespace std{

template<class T> class vector{
public:
 typedef size_t size_type;
 typedef T* iterator;
 typedef T& reference;
 vector(size_t reserve=0):data(0),fill(0) {realloc(fill);}
 ~vector() {realloc(0);}
 iterator begin() const {return data;}
 iterator end() const {return data+fill;}
 reference front() {return *data;}
 reference back() {return data[fill-1];}
 reference operator[](size_type i) {return data[i];}
 reference at(size_type i);
 size_type size() const {return fill;}
 bool empty() const {return !size();}
 void push_back(const T&val) {realloc(fill+1); back()=val;}
 iterator erase(iterator p) {
  memmove(p,p+1,(end()-p+1)*sizeof(T));
  return p;
 }
 iterator insert(iterator p,const T&) {
  realloc(fill+1);
  memmove(p+1,p,(end()-p+1)*sizeof(T));
  *p=val;
  return p;
 }
 void reserve(size_type);
 size_type capacity() const;
private:
 T*data;		// Erst der Zeiger
 size_type fill;	// Dann der Füllstand
 void realloc(size_type n) {
  data=(T*)::realloc(data,(fill=n)*sizeof(T));
  if (n && !data) ::RaiseException(0,0,0,0);
 }
};
}
Vorgefundene Kodierung: ANSI (CP1252)4
Umlaute falsch? - Datei sei ANSI-kodiert (CP1252)