vector模型是一个动态数组,它本身是“将元素至于动态数组中加以管理”的一个抽象概念,但是c++标准并未要求以动态数组实作vector。
在使用标准库里面的vector时,必须包含头文件#include<vector>
其中型别vector是一个定义于namespace std的template。
namespace std{
template<class T,class Allocator =allocator<T>>
class vector;
}
通过查看标准库里面的vector函数,利用迭代器Iterator,模拟实现vector,代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
#include<assert.h>
using namespace std;
template<typename T>
class Vector
{
public:
typedef T* Iterator;
Vector()
:_start(0)
, _finish(0)
, _endOfstorage(0)
{}
Vector(const T* str, size_t size)//构造size个元素
:_start(new T[size])
, _finish(_start)//(没放空间时)//_finish(_start+size)(放了空间)
, _endOfstorage(_start + size)
{
//memcpy(_start,str,sizeof(T)*size);
for (size_t i = 0; i<size; ++i)
{
*_finish++ = str[i];//_start[i]=str[i];
}
}
Vector(const Vector<T>& v)//拷贝构造函数
{
size_t size = Size();
_start = new T[size];
for (size_t i = 0; i<size; i++)
{
_start[i] = v._start[i];
}
_finish = _start + size;
_endOfstroage = _finish;
}
Vector& operator=(const Vector<T>& v)//赋值运算符重载
{
size_t size = v.Size();
if (this != &v)
{
T*tmp = new T[size];