我们的最简单的vector要实现以下的一些功能
push_back
pop_back
[]
iterator_begin
iterator_end
下面的程序简单的实现了一个vector,只是简单的实现,并不涉及到一些高级功能,我们的模板如下
#include <iostream>
#include <cstring>
using namespace std;
template<typename T>
class MyVector
{
public:
MyVector(int len = 0):max_len(len), m_Date(nullptr), pos(0) {
if (len > 0) {
// 创建一个数组
m_Date = new T[len];
memset(m_Date, 0, sizeof(m_Date) * len);
}
else {
// 默认创建的数组长度为20
max_len = 20;
m_Date = new T[max_len];
memset(m_Date, 0, sizeof(m_Date) * max_len);
}
};
~MyVector(){
delete[] m_Date;
}
void push_back(const T& v) {
// vector 小于数组的最大长度
if (pos < max_len) {
m_Date[pos] = v;
}
// 否则的话需要扩容
else {
T* new_Date = new T[2 * max_len + 1];
for (int i = 0;i < max_len;i++) {
new_Date[i] = m_Date[i];
}
new_Date[pos] = v;
delete[] m_Date;
m_Date = new_Date;
max_len = 2 * max_len + 1;
}
++pos;
}
T pop_back() {
--pos;
return m_Date[pos];
}
int size() {
return this->pos;
}
T* begin() {
return this->m_Date;
}
T* end() {
return this->m_Date + pos;
}
T operator[](int n) {
if (n < pos) {
return m_Date[n];
}
cout << "out of memery!" << endl;
return T();
}
protected:
T* m_Date;
int max_len;
int pos;
};
我们的测试代码如下
int main() {
MyVector<int> v(2);
// 测试vector的添加元素和扩容
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
// 测试迭代器
for (int* iter = v.begin();iter != v.end();++iter) {
cout << *iter << endl;
}
// 测试删除元素
cout << v.pop_back() << endl;
// 测试直接提取元素
cout << v[0] << endl;
// 测试返回vector的长度
cout << v.size() << endl;
return 0;
}
得到的结果如下
1
2
3
4
1
out of memery!
0
4
3
2
1
pos is litter than 00
-1
可见简单的vector可以实现简单的功能,我们只需要掌握泛型编程的精髓就好,不要在一些细枝末节上花费太多时间,