参考了这篇博客:C++ 实现 vector
练习模板类,命名空间,重载运算符的根底应用。加了个命名空间和对方括号的重载,使得能够通过索引拜访数据。
#include <iostream>
namespace Morpheus {
template<typename T>
class vector {
private:
T* _first;
T* _last;
T* _end;
public:
vector(int size = 5) {_first = new T[size];
_last = _first;
_end = _first + size;
}
~vector() {
delete _first;
_first = nullptr;
_last = nullptr;
_end = nullptr;
}
bool isEmpty() {return _first == _last;}
bool isFull() {return _last == _end;}
int size() {return _last - _first;}
void push_back(const T& x) {if (isFull()) {expand();
}
*_last++ = x;
}
void pop_back() {if (!isEmpty()) {_last--;}
}
T operator[](const int& i) {return _first[i];
}
private:
void expand() {
int len = _end - _first;
T* temp = new T[2 * len];
for (int i = 0; i < len; ++i) {temp[i] = _first[i];
}
delete[] _first;
_first = temp;
_last = _first + len;
_end = _first + 2 * len;
}
};
}
int main() {
Morpheus::vector<double> v;
v.push_back(1.2);
v.push_back(1.3);
v.push_back(1.4);
for (int i = 0; i < v.size(); ++i) {std::cout << v[i] << ",";
}
v.pop_back();
v.pop_back();
for (int i = 0; i < v.size(); ++i) {std::cout << v[i] << ",";
}
}