vector的重载实现以及常见成员方法
1,vector定义
vector(向量)类似于数组,它储存具有相同数据类型的一组元素,可以从后面快速的插入和删除元素,可以快速地随机访问元素。但是在序列中间插入删除元素较慢,因为需要移动插入或删除处后面的所有元素。
2,vector重载的实现
#include<iostream>
using namespace std;
/*
Vector 向量容器
*/
template<typename T>
class Vector
{
public:
Vector(int size = 10)
{
first = new T[size];
last = first;
endl = first + size;
}
~Vector()
{
delete[]first;
first = endl = last = NULL;
}
Vector(const Vector<T> &src)
{
int size = src.last - src.first;
first = new T[src.endl - src.first];
for (int i = 0; i < size; ++i)
{
first[i] = src.first[i];
}
last = first + size;
endl = first + (src.endl - src.first);
}
Vector<T>& operator=(const Vector<T> &src)
{
if (this == &src)
{
return*this;
}
delete[]first;
first = NULL;
int size = src.last - src.first;
first = new T[src.endl - src.first];
for (int i = 0; i < size; ++i)
{
first[i]=src.first[i];
}
last =first+size;
endl = first + (src.endl - src.first);
return*this;
}
bool full()
{
return first == endl;
}
// 给容器末尾添加元素
void push_back(const T &val)
{
if (full())
{
reSize();
}
*last++=val;
}
// 从末尾删除元素
void pop_back()
{
if (last == first)
{
return;
}
--last;
}
int size()
{
return last - first;
}
// 给Vector容器提供迭代器的实现
class iterator
{
public:
iterator(T*ptr = NULL) :_ptr(ptr){}
//iterator(T*ptr = NULL, int pos = 0){ _ptr = _ptr + pos; }
bool operator!=(const iterator&it)
{
return _ptr != it._ptr;
}
bool operator++()
{
_ptr++;
return true;
}
T&operator*()
{
return *_ptr;
}
T operator[](int index)
{
return _ptr[index];
}
private:
T*_ptr;
};
iterator begin(){ return iterator(first); }
iterator end(){ return iterator(last); }
private:
T *first; // 表数组的起始地址
T *last; // 表示最后一个元素的后继位置的地址
T *endl; // 末尾位置的后继位置
void reSize()
{
int len = size();
T*tmp = new T[size()* 2];
int i = 0;
for (; i < len; ++i)
{
tmp[i] = first[i];
}
delete[]first;
first = tmp;
endl = first + len * 2;
last = first + len;
}
template<typename T>
friend ostream& operator<<(ostream &out, const Vector<T> &vec);
};
template<typename T>
ostream& operator<<(ostream &out, const Vector<T> &vec)
{
Vector<T>::iterator it = vec.begin();
for (; it != vec.end(); ++i)
{
out << *it << " ";
}
cout << endl;
}
int main()
{
Vector<char>vec;
vec.push_back('a');
vec.push_back('b');
vec.push_back('c');
vec.push_back('d');
vec.pop_back();
vec.push_back('e');
vec.push_back('f');
vec.push_back('g');
vec.push_back('h');
Vector<char>::iterator it = vec.begin();
for (; it != vec.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
}
运行结果如下: