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

免费做快闪网站河南安阳市区号

免费做快闪网站,河南安阳市区号,电话销售外呼系统软件,东莞做企业营销型网站的公司1.定义vector vector的定义分为四种 (1)vector() ——————无参构造 (2)vector(size_t n,const value_type& val value_type()) ——————构造并初始化n个val (3)vector(const vector& v1) ———————拷贝构造 (4)vector(inputiterator first,inpu…

1.定义vector

vector的定义分为四种

(1)vector()   ——————无参构造

(2)vector(size_t n,const value_type& val = value_type())   ——————构造并初始化n个val

(3)vector(const vector& v1) ———————拷贝构造

(4)vector(inputiterator first,inputiterator last) ————使用迭代器进行初始化

代码模拟实现:

namespace c_simplystudy:
{
template<class T>
class vector
{
public:vector(){_start = nullptr;_finish = nullptr;_endOfStorage = nullptr;}vector(int n, const T& value = T()):_start(new T[n]),_finish(_start+n),_endOfStorage(_finish){for (int i = 0; i < n; i++){*(_start + i) = value;}}
template<class InputIterator>vector(const vector<T>& v):_start(nullptr),_finish(nullptr), _endOfStorage(nullptr){reverse(v.capacity());iterator it = begin();const iterator last = cbegin();while (it != last){*it++ = *last++;}_finish = it;}vector(InputIterator first, InputIterator last){while (first != last){push_back(*first);first++;}}
private:
iterator _start; // 指向数据块的开始
iterator _finish; // 指向有效数据的尾
iterator _endOfStorage; // 指向存储容量的尾
};
}

2.vector迭代器的使用与空间增长控制

迭代器:

 (1)begin()————获取第一个数据位置的iterator/const_iterator

 (2)end()————获取最后一个数据的下 一个位置的iterator/const_iterator

 (3)rbegin()————获取最后一个数据位置的reverse_iterator

 (4)rend()————获取第一个数据前一个位置的reverse_iterator

空间增长:
 (1)size()————获取数据个数

 (2)capacity()————获取容器容量

不同的编译器下,容器“满了”时,扩容的规则不同,在VS下是按1.5倍增长的,g++则是按2倍增长

 (3)empty()————判空

 (4)reserve()————改变capacity

reserve只负责开辟空间,如果确定知道需要用多少空间,reserve可以缓解vector增容的代 价缺陷问题

 (5)resize(n,val)————改变size(n为改变后的size,val为用于初始化的值)

如果n<size,则size=n,不进行初始化;如果n>capacity,则扩容至n,并且将未初始化的数据初始化为val

3.vector增删查改

 (1)push_back()————尾插

 (2) pop_back()————尾删

 (3)find()————查找

如果存在则返回位置

 (4)insert()————插入

 (5)erase()————删除

 (6)swap()————交换两个vector

 (7)operate[]————下标索引

4.vector迭代器失效

vector的增删会导致迭代器失效——实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失效的迭代器,程序可能会崩溃)

迭代器失效有两种情况:

(1)当 it 用vector.begin()初始化后,如果对vector进行增或者可能会导致其扩容的操作,则vector在扩容时会释放掉旧空间,begin()会指向新空间,而这里的 it 却仍指向被释放掉的旧空间,此时用 it 进行迭代器操作则会发生迭代器失效

int main()
{vector<int> v{1,2,3,4,5};auto it=v.begin();v.reserve(100);     //通过扩容使迭代器失效while(it != v.end()){cout << *it << " ";++it;}            //vs下会直接崩溃return 0;
}

(2)继续将 it 用vector中的迭代器进行初始化,如果使用erase将 it 指向的迭代器删除掉,则 it 指向的迭代器会失效,如果仍然对 it 进行解引用,则会发生报错;erase删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理 论上讲迭代器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end 的位置,而end位置是没有元素的,那么pos就失效了。因此删除vector中任意位置上元素 时,vs就认为该位置迭代器失效了

#include <vector>
#include <algorithm>
int main()
{vector<int> v{1,2,3,4,5};vector<int>::iterator it = find(v.begin(), v.end(), 3);v.erase(it);while(it != v.end()){cout << *it << " ";++it;}          //因为空间还是原来的空间,后序元素往前搬移了,it的位置还是有效的//erase删除的迭代器如果是最后一个元素,删除之后it已经超过end//                         此时迭代器是无效的,++it导致程序崩溃return 0;
}

(此问题在string中也会出现,而且如果在linux环境下运行程序,由于g++编译器对于迭代器失效的检测并不严格,所以当迭代器失效后,对失效后的迭代器进行引用并不会报错,但是运行结果已经不同)

迭代器失效解决方法在使用前,对迭代器重新赋值


文章转载自:

http://E3l5ZIFE.fwnyz.cn
http://YxOW1HqO.fwnyz.cn
http://BhQhgeIp.fwnyz.cn
http://dOUeYrV6.fwnyz.cn
http://7HbzroF3.fwnyz.cn
http://5De4cUvT.fwnyz.cn
http://pbIXiIsy.fwnyz.cn
http://lllmnASn.fwnyz.cn
http://jAldbXlw.fwnyz.cn
http://SqiHBXdo.fwnyz.cn
http://QxPjciMO.fwnyz.cn
http://YgEoWDAM.fwnyz.cn
http://MjvqqJou.fwnyz.cn
http://WlB7Ry0M.fwnyz.cn
http://gTvofctP.fwnyz.cn
http://gbjuJUrX.fwnyz.cn
http://bQqvtwW4.fwnyz.cn
http://5B8xqIqL.fwnyz.cn
http://x7lqIVRu.fwnyz.cn
http://S6rEJsgS.fwnyz.cn
http://nVKqLizj.fwnyz.cn
http://p9plYEkE.fwnyz.cn
http://TFt3jCtt.fwnyz.cn
http://hRq2tuXj.fwnyz.cn
http://WDrLkDSm.fwnyz.cn
http://Q1G3P95j.fwnyz.cn
http://tei6y0pd.fwnyz.cn
http://BWmkFekW.fwnyz.cn
http://oliQHIFa.fwnyz.cn
http://VBcZOryO.fwnyz.cn
http://www.dtcms.com/wzjs/757116.html

相关文章:

  • 网站策划书需求分析清远市seo网站设计联系方式
  • 哪个网站可以做行程攻略网络规划设计师学历低
  • 广元市住房和城乡建设局网站国内做化妆刷的比较好的网站
  • 个人网站设计开题报告免费的产品推广平台
  • 网站主页排版知名网站建设是哪家
  • 网站备案怎么查询wordpress authkey
  • 陕西高速公路建设集团网站网站如何防止黑客攻击
  • wordpress收不到网站免费crm网站下载的软件
  • 怎么做一个网站页面南宁网站制作费用
  • 网络营销网站开发石家庄网站制作方案
  • 自己制作网站枣庄手机网站建设电话
  • 网站做短视频业务许可网站seo优缺点
  • 网页系统设计做网站优化用什么软件
  • 磁器口网站建设凯里做网站
  • 网站副标题wordpress知道内容怎样让别人做网站
  • 江苏商城网站建设网站绝对路径
  • 外贸网站建设设计如何创建软件app
  • 表白二维码制作网站互联网公司设计师都设计什么
  • 郑州企业建站网站wordpress dux2.0
  • 网站建设 淘宝运营天元建设集团有限公司承兑汇票兑付
  • 网站建设流程所用工具海南自贸港跨境电商怎么做
  • 望谟网站建设十万pv的网站建设
  • 如何做漂亮的网站首页网站建设零金手指花总
  • wordpress 删除 后台菜单seo整站优化系统
  • 上海高端室内设计株洲seo优化首选
  • 南昌市建设规费标准网站.net网站开发免费教程
  • 网站开发个人所得税网站开发有哪几类
  • 茂名建设网站手机网站可以做公众号
  • 星沙网站建设公司网站服务器建设
  • 他达拉非说明书成都网络优化网站