直接上代码
#include<iostream>
//#include "my_vector.cpp"
template <class elementType>
class My_Vector
{
public:
typedef elementType* iterator;
My_Vector(); //
~My_Vector(); //
int size(); //
void reserve(int newCapacity);//申请newCapacity存储空间
void push_back(const elementType &t);//
void pop_back();
void clear();//
void erase(iterator &a);//
iterator begin(){return &obj[0];}//
iterator end(){return &obj[ObjSize];}//
elementType &operator[](int index);
private:
elementType *obj;
int ObjSize;
int ObjCap;
};
#include "my_vector.h"
#include<iostream>
template <class elementType>
My_Vector<elementType>::My_Vector()
{
ObjSize = 0;
ObjCap = 0;
// obj = new elementType[ObjCap];
}
template <class elementType>
My_Vector<elementType>::~My_Vector()
{
delete[]obj;
ObjSize = 0;
ObjCap = 0;
}
template <class elementType>
int My_Vector<elementType>::size()
{
return ObjSize;
}
template <class elementType>
void My_Vector<elementType>::reserve(int newCapacity)//申请newCapacity存储空间
{
if (newCapacity < ObjCap)
{
return;
}
else
{
elementType *oldobj = obj;
obj = new elementType[newCapacity];
for (int i = 0; i < ObjSize; ++i)
{
obj[i] = oldobj[i];
}
ObjCap = newCapacity;
delete[]oldobj;
}
}
template <class elementType>
void My_Vector<elementType>::push_back(const elementType &t)
{
if (ObjSize + 1 > ObjCap)//容量不够
{
reserve(ObjCap * 2 + 1);
obj[ObjSize++] = t;
}
else //容量够,直接加入
{
obj[ObjSize++] = t;
}
}
template <class elementType>
void My_Vector<elementType>::pop_back()
{
ObjSize--;
}
template <class elementType>
void My_Vector<elementType>::clear()
{
ObjSize = 0;
ObjCap = 1;
elementType *oldobj = obj;
obj = new elementType[ObjCap];
delete[]oldobj;
}
template <class elementType>
void My_Vector<elementType>::erase(iterator &a)
{
for (iterator i = a; i <this->end(); i++)
*i = *(i + 1);
--ObjSize;
}
template <class elementType>
elementType &My_Vector<elementType>::operator[](int index)
{
return obj[index];
}
测试代码#include <iostream>
#include <string>
#include "my_vector.cpp"
using namespace std;
class test
{
public:
test()
{
cout << "test..." << endl;
}
test(const test &t)
{
cout << "copy test..." << endl;
}
~test()
{
cout << "delete test..." << endl;
}
};
int main()
{
/* vector<int> a;
cout << a.size() << " " << a.capacity()<<endl;
for (int i = 0; i < 24;i++)
a.push_back(i);
cout << a.size() << " " << a.capacity() << endl;
while (a.size() != a.capacity())
a.push_back(0);
a.push_back(0);
cout << a.size() << " " << a.capacity() << endl;
vector< pair<string,int> > q;
string s;
int a;
pair<string, int> p;
// cin >> s;
while (cin >> p.first >> p.second)
{
q.push_back(p);
}*/
My_Vector<int> IntVector;
int i = 1;
for (int i = 0; i < 10;i++)
IntVector.push_back(i);
for (My_Vector<int>::iterator i = IntVector.begin(); i != IntVector.end(); i++)
{
cout << *i;
}
cout << endl;
My_Vector<int>::iterator n = IntVector.begin();
IntVector.erase(n);
for (My_Vector<int>::iterator i = IntVector.begin(); i != IntVector.end(); i++)
{
cout << *i;
}
cout << endl;
IntVector.clear();
int a = 100;
IntVector.push_back(a);
for (My_Vector<int>::iterator i = IntVector.begin(); i != IntVector.end(); i++)
{
cout << *i;
}
cout << endl;
My_Vector<string> stringVector;
string word;
while (cin >> word)
{
stringVector.push_back(word);
}
for (My_Vector<string>::iterator i = stringVector.begin(); i != stringVector.end(); i++)
{
cout << *i;
}
cout << endl;
My_Vector<test> classvector;
test t1;
test t2;
test t3;
classvector.push_back(t1);
classvector.push_back(t2);
classvector.push_back(t3);
classvector.push_back(t1);
return 0;
}
测试输出如下:
0123456789
123456789
100
abcd
^Z
abcd
test...
test...
test...
test...
test...
test...
test...
delete test...
test...
test...
test...
test...
test...
test...
test...
delete test...
delete test...
delete test...
delete test...
delete test...
delete test...
delete test...
delete test...
delete test...
delete test...
delete test...
delete test...
delete test...
请按任意键继续. . .