#include <iostream>
using namespace std;
template<typename T, const int SZ = 10>
class MyVector
{
public:
MyVector(): next(0){}
~MyVector(){
for(int i = 0; i < next; i++){
delete value_array[i];
}
}
void push_back(const T& t){
value_array[next++] = new T(t);
}
T& operator[](int i){
return *(value_array[i]);
}
private:
T* value_array[SZ];
int next;
};
class Number
{
public:
Number(int ii = 0): i(ii){cout << ".";}
Number(const Number& N): i(N.i){cout << "*";}
~Number(){cout << "~";}
int getValue() const{return i;}
private:
int i;
};
int main()
{
MyVector<Number> vec;
Number n0(100);
Number n1(200);
vec.push_back(n0);
vec.push_back(n1);
cout << vec[0].getValue() << endl;
cout << vec[1].getValue() << endl;
}
简化版vector, 简化在1) 固定长度空间;2)甚至没有边界检查;3) 没有迭代器。
主要演示两点: 1)push_back函数接受的是引用参数;2) vector的push_back函数用拷贝构造函数复制输入变量的内容。
输出结果:
..**100
200
~~~~
结果表明,调用了Number类的默认构造函数2次,拷贝构造函数2次,析构函数4次。