#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);
}
};
}
Detected encoding: UTF-8 | 0
|