rayzor
annotate src/stl/vector.h @ 4:18bdbcbaee81
forgot to add stl/vector.h
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 06 Apr 2014 01:12:50 +0300 |
parents | |
children | 70e332156d02 |
rev | line source |
---|---|
nuclear@4 | 1 /* vi:set ft=cpp: */ |
nuclear@4 | 2 #ifndef VECTOR_H_ |
nuclear@4 | 3 #define VECTOR_H_ |
nuclear@4 | 4 |
nuclear@4 | 5 template <class T> |
nuclear@4 | 6 class vector { |
nuclear@4 | 7 private: |
nuclear@4 | 8 T *data; |
nuclear@4 | 9 size_t num_items, max_items; |
nuclear@4 | 10 |
nuclear@4 | 11 public: |
nuclear@4 | 12 vector() |
nuclear@4 | 13 { |
nuclear@4 | 14 data = 0; |
nuclear@4 | 15 num_items = max_items = 0; |
nuclear@4 | 16 } |
nuclear@4 | 17 |
nuclear@4 | 18 vector(const vector &v) |
nuclear@4 | 19 { |
nuclear@4 | 20 data = 0; |
nuclear@4 | 21 num_items = max_items = 0; |
nuclear@4 | 22 resize(v.size()); |
nuclear@4 | 23 |
nuclear@4 | 24 for(size_t i=0; i<v.size(); i++) { |
nuclear@4 | 25 data[i] = v.data[i]; |
nuclear@4 | 26 } |
nuclear@4 | 27 } |
nuclear@4 | 28 |
nuclear@4 | 29 vector &operator =(const vector &v) |
nuclear@4 | 30 { |
nuclear@4 | 31 if(&v != this) { |
nuclear@4 | 32 clear(); |
nuclear@4 | 33 resize(v.size()); |
nuclear@4 | 34 |
nuclear@4 | 35 for(size_t i=0; i<v.size(); i++) { |
nuclear@4 | 36 data[i] = v.data[i]; |
nuclear@4 | 37 } |
nuclear@4 | 38 } |
nuclear@4 | 39 return *this; |
nuclear@4 | 40 } |
nuclear@4 | 41 |
nuclear@4 | 42 ~vector() |
nuclear@4 | 43 { |
nuclear@4 | 44 clear(); |
nuclear@4 | 45 } |
nuclear@4 | 46 |
nuclear@4 | 47 void clear() |
nuclear@4 | 48 { |
nuclear@4 | 49 delete [] data; |
nuclear@4 | 50 max_items = num_items = 0; |
nuclear@4 | 51 } |
nuclear@4 | 52 |
nuclear@4 | 53 bool empty() const |
nuclear@4 | 54 { |
nuclear@4 | 55 return num_items == 0; |
nuclear@4 | 56 } |
nuclear@4 | 57 |
nuclear@4 | 58 size_t size() const |
nuclear@4 | 59 { |
nuclear@4 | 60 return num_items; |
nuclear@4 | 61 } |
nuclear@4 | 62 |
nuclear@4 | 63 void resize(size_t nsz) |
nuclear@4 | 64 { |
nuclear@4 | 65 if(nsz > 0) { |
nuclear@4 | 66 T *newdata = new T[nsz]; |
nuclear@4 | 67 if(!newdata) return; |
nuclear@4 | 68 |
nuclear@4 | 69 size_t num = num_items < nsz ? num_items : nsz; |
nuclear@4 | 70 for(size_t i=0; i<num; i++) { |
nuclear@4 | 71 newdata[i] = data[i]; |
nuclear@4 | 72 } |
nuclear@4 | 73 |
nuclear@4 | 74 delete [] data; |
nuclear@4 | 75 data = newdata; |
nuclear@4 | 76 max_items = nsz; |
nuclear@4 | 77 num_items = num; |
nuclear@4 | 78 } else { |
nuclear@4 | 79 delete [] data; |
nuclear@4 | 80 max_items = num_items = 0; |
nuclear@4 | 81 } |
nuclear@4 | 82 } |
nuclear@4 | 83 |
nuclear@4 | 84 void push_back(const T &item) |
nuclear@4 | 85 { |
nuclear@4 | 86 if(num_items >= max_items) { |
nuclear@4 | 87 resize(max_items > 0 ? max_items * 2 : 8); |
nuclear@4 | 88 } |
nuclear@4 | 89 data[num_items++] = item; |
nuclear@4 | 90 } |
nuclear@4 | 91 |
nuclear@4 | 92 T &operator [](int idx) |
nuclear@4 | 93 { |
nuclear@4 | 94 return data[idx]; |
nuclear@4 | 95 } |
nuclear@4 | 96 |
nuclear@4 | 97 const T &operator [](int idx) const |
nuclear@4 | 98 { |
nuclear@4 | 99 return data[idx]; |
nuclear@4 | 100 } |
nuclear@4 | 101 }; |
nuclear@4 | 102 |
nuclear@4 | 103 #endif // VECTOR_H_ |