21 #ifndef _SIMPLE_VECTOR_H_ 22 #define _SIMPLE_VECTOR_H_ 40 typedef const T *const_iterator;
42 SimpleVector():beginP(NULL),middleP(NULL),endP(NULL) { }
43 SimpleVector(
const SimpleVector &v):
44 beginP(v.beginP),middleP(v.middleP),endP(v.endP) { }
45 explicit SimpleVector(
size_t s):beginP(NULL),middleP(NULL),endP(NULL) {
48 void resize(
size_t s) {
51 if (middleP>endP || size()<capacity()/2)
60 const_iterator begin()
const {
63 const_iterator end()
const {
70 const T &front()
const {
78 const T &back()
const {
83 return size_t(middleP-beginP);
85 size_t capacity()
const {
86 return size_t(endP-beginP);
89 return beginP == endP;
91 T &operator[](
size_t i) {
95 T operator[](
size_t i)
const {
99 void push_back(
const T &v) {
102 doRealloc(s==0?1:2*s);
112 if (size()<capacity()/2)
117 beginP=middleP=endP=NULL;
119 void deallocateAll() {
123 void doRealloc(
size_t s) {
124 size_t i=middleP-beginP;
125 beginP=(T *)realloc(beginP,s*
sizeof(T));
128 assert(middleP<=endP);