c++中向量模拟实现的示例分析

  介绍

这篇文章将为大家详细讲解有关c++中向量模拟实现的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、向量是什么?

向量是表示可变大小数组的序列容器,它也采用连续存储空间来存储元素,因此可以采用下标对向量的元素进行访问,它的大小是动态改变的,向量使用动态分配数组来存储它的元素;

二,容器特性

1。顺序序列

顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素;

2。动态数组

支持对序列中的任意元素进行快速直接访问,甚至可以通过指针进行该操作。操供了在序列末尾相对快速地添加/删除元素的操作,

3。能够感知内存分配器的

容器使用一个内存分配器对象来动态地处理它的存储需求,

三、向量的模拟实现

定义一个类:

template   class 向量   {   ,,,T *,的地方,,//首元素地址   ,,,T *, _finish;,//最后一个元素地址的下一个地址   ,,,T *, _endOfStorage;,//空间的尾地址   公众://成员函数   };

构造函数

向量()   ,,,,的地方(nullptr)   ,,,,,_finish (nullptr)   ,,,,,_endOfStorage (nullptr)   {}      向量(size_t  n, const  T&, value =, T ())   ,,,,的地方(nullptr)   ,,,,,_finish (nullptr)   ,,,,,_endOfStorage (nullptr)   {   ,,,储备(n);   ,,,while  (n——)   ,,,{   ,,,,,,,push_back方法(价值);   ,,,}   }   向量(InputInterator 首先,InputInterator 最后)   ,,,,,,,,的地方(nullptr)   ,,,,,,,,,_finish (nullptr)   ,,,,,,,,,_endOfStorage (nullptr)   ,,,{   ,,,,,,,while  (first  !=,最后)   ,,,,,,,{   ,,,,,,,,,,,阻力(*);   ,,,,,,,,,,,+ +;   ,,,,,,,}   ,,,}

数据大小,空间大小

size_t 大小(),const   {   ,,,return  _finish 作用;地方;   }      size_t 能力()常量   {   ,,,return  _endOfStorage 作用;地方;   }

尾插

void 阻力(const  T&,值)   ,,,{   ,,,,,,,if  (_finish ==, _endOfStorage)   ,,,,,,,{   ,,,,,,,,,,,size_t  newC =,==, _endOfStorage  nullptr  ?, 1,, 2, *,能力();   ,,,,,,,,,,,反向(价值);   ,,,,,,,}   ,,,,,,,* _finish =,值;,,,   ,,,,,,,+ + _finish;   ,,,}

<强>扩容

有资源进行拷贝时,使用深拷贝;类型为自定义类型时,发生浅拷贝,调用自定义类型析构函数,释放资源,导致资源二次释放,所以自定义类型的拷贝有资源时进行深拷贝;

深拷贝与浅拷贝的区别及应用

void 储备(size_t  n)   {   if  (n 和gt;,能力())   {   size_t  sz =,大小();   时间=T *, arr  new  T [n];   if (的地方)   {   memcpy(加勒比海盗,地方,sizeof (T), *, sz);   删除[],地方;   }//更新   _start =,加勒比海盗;   +=_finish  _start 深圳;   +=_endOfStorage  _start  n;   }   }

改变数据大小

void 调整(size_t  n, const  T&, val =, T ())   ,,,{   ,,,,,,,if  (n 祝辞,能力())   ,,,,,,,{   ,,,,,,,,,,,储备(n);   ,,,,,,,}   ,,,,,,,else  if  (n 祝辞,大小())   ,,,,,,,{   ,,,,,,,,,,,while  (_finish  !=, _start  +, n)   ,,,,,,,,,,,{   ,,,,,,,,,,,,,,,* _finish =, val;   ,,,,,,,,,,,,,,,_finish + +;   ,,,,,,,,,,,}   ,,,,,,,}   ,,,,,,,,,,,_finish =, _start  +, n;   ,,,}

位置插入值

void 插入(iterator  pos, const  T&, val)   ,,,{   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

c++中向量模拟实现的示例分析