当前位置: 首页 > wzjs >正文

网站大全全部免费建筑网站资料

网站大全全部免费,建筑网站资料,网站建设公司 成都,推广小程序的营销策略文章目录 介绍initializer_list与string的不同底层总代码 介绍 C 中的 vector 是一种序列容器,它允许你在运行时动态地插入和删除元素。 vector 是基于数组的数据结构,但它可以自动管理内存,这意味着你不需要手动分配和释放内存。 与 C 数组相…

文章目录

  • 介绍
  • initializer_list
  • 与string的不同
  • 底层
  • 总代码

介绍

C++ 中的 vector 是一种序列容器,它允许你在运行时动态地插入和删除元素。
vector 是基于数组的数据结构,但它可以自动管理内存,这意味着你不需要手动分配和释放内存。
与 C++ 数组相比,vector 具有更多的灵活性和功能,使其成为 C++ 中常用的数据结构之一。
vector 是 C++ 标准模板库(STL)的一部分,提供了灵活的接口和高效的操作。
C++ 中的 vector 是一种序列容器,它允许你在运行时动态地插入和删除元素

在这里插入图片描述

vector本质和 string一样也是模板
写法是vector< T > 名称 (T是类型)
他与string的接口差不多,但也有一点不同 。

在这里插入图片描述

我们来 看一下vector的构造,第一个是默认构造(看不懂的是内存池先不用管),第二个是n个 val的构造,第三个是迭代器区间的构造,第四个是拷贝构造。

initializer_list

vector 中和string比较增加了 initializer_list容器,这个容器可以作为接口的形参出现。

在这里插入图片描述

本身我们的{ }里面的内容就是initializer_list类型的
在这里插入图片描述

这3段代码 不同,d1本身是是vector< int >型的接受的类型类似于d3 是initializer_list< int >型但是它进行了隐式类型转化。
d2就是{1,2,3,4}作为形参传过去,d3则是{ }的真正类型。

与string的不同

此外vector和string类不同就是vector没有append函数就是不能加一个字符串,即使是vector< string >也只能一个一个加。
在这里插入图片描述
在这里插入图片描述
从两边形参上看vector只支持迭代器位置的修改,而string还支持下标位置pos的修改,同理其他接口 如erase也是这样

底层

首先我们要知道 和string不一样,定义char ,capacity,size。vector的成员变量都是 用迭代器定义的,我们 又可以把迭代器看作是T 就是类似于指针的东西,所以vector 就是 用指针定义的成员变量。

namespace Z
{template<class T>class vector{public:typedef T* iterator;typedef const T* const_iterator;
privite:iterator _start;//头指针类似于.begin()iterator _finish;//结尾元素的下一位置,类似于.end()iterator _endofstorage;//类似capacity,_start-_finish得来};

我们再来写构造函数有默认构造,还有无参构造还有initializer_list构造,析构,还有拷贝构造

	vector()//默认:_start(nullptr),_finish(nullptr),_endofstorage(nullptr){}vector(initializer_list<T> il)//initializer_list构造:_start(nullptr), _finish(nullptr), _endofstorage(nullptr){reserve(il.size());for (auto& e : il){push_back(e);}}~vector()//析构{if (_start){delete[] _start;_start = _finish = _endofstorage = nullptr;}}
vector(initializer_list<T> il)//initializer_list类型:_start(nullptr), _finish(nullptr), _endofstorage(nullptr)
{reserve(il.size());for (auto& e : il){push_back(e);}
}

其中initializer_list类型的reserve和 push_back都是省略this指针的。

常见 的一些接口

iterator begin()
{return _start;
}iterator end()
{return _finish;
}const_iterator begin() const
{return _start;
}const_iterator end() const
{return _finish;
}
T& operator[](size_t i)
{assert(i < size());return _start[i];
}size_t size() const
{return _finish - _start;
}size_t capacity() const
{return _endofstorage - _start;
}// 21:12
void reserve(size_t n)
{if (n > capacity()){size_t oldSize = size();T* tmp = new T[n];if (_start){memcpy(tmp, _start, sizeof(T) * oldSize);delete[] _start;}_start = tmp;_finish = _start + oldSize;_endofstorage = _start + n;}
}void push_back(const T& x)
{/*if (_finish == _endofstorage){reserve(capacity() == 0 ? 4 : capacity() * 2);}*_finish = x;++_finish;*/insert(_finish, x);
}bool empty()
{return _start == _finish;
}void pop_back()
{assert(!empty());--_finish;
}void insert(iterator pos, const T& x)
{assert(pos >= _start && pos <= _finish);if (_finish == _endofstorage){size_t len = pos - _start;reserve(capacity() == 0 ? 4 : capacity() * 2);pos = _start + len;}iterator i = _finish - 1;while (i >= pos){*(i + 1) = *i;--i;}*pos = x;++_finish;
}

总代码

namespace Z
{template<class T>class vector{public:typedef T* iterator;typedef const T* const_iterator;iterator begin(){return _start;}iterator end(){return _finish;}const_iterator begin() const{return _start;}const_iterator end() const{return _finish;}vector():_start(nullptr), _finish(nullptr), _endofstorage(nullptr){}vector(initializer_list<T> il):_start(nullptr), _finish(nullptr), _endofstorage(nullptr){reserve(il.size());for (auto& e : il){push_back(e);}}~vector(){if (_start){delete[] _start;_start = _finish = _endofstorage = nullptr;}}T& operator[](size_t i){assert(i < size());return _start[i];}size_t size() const{return _finish - _start;}size_t capacity() const{return _endofstorage - _start;}// 21:12void reserve(size_t n){if (n > capacity()){size_t oldSize = size();T* tmp = new T[n];if (_start){memcpy(tmp, _start, sizeof(T) * oldSize);delete[] _start;}_start = tmp;_finish = _start + oldSize;_endofstorage = _start + n;}}void push_back(const T& x){/*if (_finish == _endofstorage){reserve(capacity() == 0 ? 4 : capacity() * 2);}*_finish = x;++_finish;*/insert(_finish, x);}bool empty(){return _start == _finish;}void pop_back(){assert(!empty());--_finish;}void insert(iterator pos, const T& x){assert(pos >= _start && pos <= _finish);if (_finish == _endofstorage){size_t len = pos - _start;reserve(capacity() == 0 ? 4 : capacity() * 2);pos = _start + len;}iterator i = _finish - 1;while (i >= pos){*(i + 1) = *i;--i;}*pos = x;++_finish;}void erase(iterator pos);private:iterator _start;iterator _finish;iterator _endofstorage;};

文章转载自:

http://d0ZVyTGu.rwLsr.cn
http://33Qav2pg.rwLsr.cn
http://FZs9XYiT.rwLsr.cn
http://6C7lTLZk.rwLsr.cn
http://9LoOu7tf.rwLsr.cn
http://hP8IutM4.rwLsr.cn
http://ycn7dcT9.rwLsr.cn
http://faAuMczQ.rwLsr.cn
http://nZiYYZ4E.rwLsr.cn
http://Xo8I8iNW.rwLsr.cn
http://g5t5eVvF.rwLsr.cn
http://MQPeQwWE.rwLsr.cn
http://IwvhGmeB.rwLsr.cn
http://j0h8bWxt.rwLsr.cn
http://FjF0vQCj.rwLsr.cn
http://cqbko1xw.rwLsr.cn
http://OR7L53TT.rwLsr.cn
http://Vgz3TEqN.rwLsr.cn
http://vbI2VIRj.rwLsr.cn
http://cqFWWi0J.rwLsr.cn
http://SmcTRq4M.rwLsr.cn
http://SSRmgTNM.rwLsr.cn
http://IlYDGqRv.rwLsr.cn
http://LNTuRXo9.rwLsr.cn
http://trCplfFl.rwLsr.cn
http://FqbfVwgu.rwLsr.cn
http://YgXVmN9q.rwLsr.cn
http://HwMs18O6.rwLsr.cn
http://JVPpsxT2.rwLsr.cn
http://mVsLxoma.rwLsr.cn
http://www.dtcms.com/wzjs/609410.html

相关文章:

  • 辽宁省建设教育协会网站怎么才能在百度上搜到自己的网站
  • 一键网站制作seo优化代运营
  • 手机网站 焦点图dw建设的网站上传
  • 建网站怎么做报分系统wordpress评论不要地址邮箱
  • 黄石网站网站建设网站建设所属行业
  • 百宝图建设工程电子网站中国拟在建项目网官网
  • 免费网站服务商邢台市建设局安全监督管理网站
  • 铜陵电子商务网站建设北京网站建设的服务公司
  • 道里网站运营培训建设本地网站 配置iis
  • 网站建设前台功能设计与实现莱芜金点子最新招工招聘启事
  • 制作网页站点的具体流程案例怎么查看网站死链接
  • 新房网站建设公司济南seo优化外包服务
  • 网站建设seo优化价格企业网站系统功能分析与设计
  • 服装网站模板下载建设部网站怎么查安全员
  • 服装网站建设规划书电商网站新闻怎么做
  • 住房和城乡建设部网站打不开零基础建设网站视频
  • 企业免费网站设计公司网站建设活动广告
  • 班级网站自助建设功能网站的ftp地址是什么
  • 菜鸟是什么网站企业oa办公软件
  • 商梦建站做服务网站要多少钱
  • 百度网站推广方案苏州市住房城乡建设局网站
  • 便捷的大连网站建设新手怎么做网络推广
  • 企业网站可以做淘宝客吗企业高管培训课程有哪些
  • app和网站的区别济南网站建设方案托管
  • 改进网站的建议电商网站获取流量的方法
  • 吉林省建设厅证件查询网站网站建设公司推荐金石下拉网络
  • 网站设置黑白色深圳建科院公司网站
  • 官渡区住房和城乡建设局网站wordpress git themes
  • 西部数码网站管理助手 mysql南海区住房城乡建设和水务局网站
  • 备案通过后怎么做网站优秀设计网站点评