《C++ Primer》读书笔记第九章-2-顺序容器操作 And vector增长问题
来源:互联网 发布:和重庆网络广播电视台 编辑:程序博客网 时间:2024/06/05 17:43
笔记会持续更新,有错误的地方欢迎指正,谢谢!
顺序容器操作
前面介绍的那些是所有容器(顺序容器+关联容器)都支持的,我们接下来介绍的只适用于顺序容器。
向顺序容器添加元素
list<int> a = {1, 2, 3}; //a为{1, 2, 3}。a.push_back(4); //a为{1, 2, 3, 4},array和forwar_list不支持。a.push_front(0); //a为{0, 1, 2, 3, 4},只有list,forward_list和deque支持。
insert允许我们在容器任意位置中插入多个元素,vector,deque,list,string都支持。
list<string> slist = {"Jay"};auto iter = slist.begin();slist.insert(iter, "Hello"); //将Hello添加到iter的前一个位置//也就是输出HelloJay
总结:调用insert会在前一个位置插入,相当于调用了push_front。
用一个对象来初始化或插入容器时,实际上放入的是拷贝,容器中元素与提供值的对象无任何关系。
访问元素
下标操作只支持string、vector、deque、array;访问成员函数返回的是引用。
每个顺序容器都有一个front(),返回首元素的引用;除forward_list之外的都有一个back(),返回尾元素的引用。
删除元素
clear和pop返回void,erase返回指向最后一个被删元素之后元素的迭代器。
vector<int> a = {1, 2, 3, 4, 5, 6};a.pop_front(); //删除首元素a.pop_back(); //删除尾元素//删除a中所有奇数auto it = a.begin();while(it != a.end()){ if(*it % 2) it = a.eraser(it); //删除奇数 //erase()返回值是一个迭代器,指向删除元素下一个元素。 else ++it;}//删除所有元素,两种方式a.clear();a.eraser(a.begin(), a.end());
特殊的forward_list操作
不常用,省略。
改变容器大小
除了array之外,我们可以用resize来改变容器大小:
- 如果当前大小大于所要求的的大小,容器后面的元素会被删除。
- 如果当前大小小于新大小,会填充指定值或默认初始值对象。
list<int> a(10, 42); //10个42a.resize(15); //后面再加5个0,是默认初始化的a.resize(25, -1); //后面再加10个-1a.resize(5); //从末尾删除20个元素,就剩5个42//如果是类类型,要么就有默认构造函数,要么就提供初始值
缩小容器,指向被删除元素的迭代器、引用和指针都会失效。
容器操作可能使迭代器失效
不保存尾后迭代器:在循环中插入删除deque、string、vector中的元素,应每次重新调用end()。
内容省略,希望规范使用容器,None失效!
vector增长问题
如果我在添加元素的时候,没有空间去容纳新元素应该怎么办呢?vector是这么做的:
- 把已有元素移动到新空间中
- 然后添加新元素
- 释放旧存储空间 那么问题又来了,我们的新空间要分配多大呢?一般来说貌似是旧空间的两倍,反正就是会预留一些空间。
阅读全文
0 0
- 《C++ Primer》读书笔记第九章-2-顺序容器操作 And vector增长问题
- 【C++ Primer】【学习笔记】【第九章】顺序容器之:vector容器的自增长
- 《C++ Primer》读书笔记-第九章 03 顺序容器操作
- c++ primer读书笔记-第九章 顺序容器
- C++ primer 读书笔记 第九章 顺序容器
- 《C++ Primer》读书笔记-第九章 04 vector对象增长
- 《C++ Primer》读书笔记第九章-1- 顺序容器概述 And 容器库概览
- C++primer 第九章:顺序容器----字符串
- 《C++ Primer》读书笔记——第九章_顺序容器
- 《C++ Primer》读书笔记-第九章 01 顺序容器
- 菜狗的C++ primer读书笔记:第九章 顺序容器
- 《C++ Primer》读书笔记第九章-3-额外的string操作 And 容器适配器
- 《C++ Primer》读书笔记-第九章 02 容器支持的操作
- C++ Primer : 第九章 : 顺序容器的操作以及迭代器失效问题
- c++primer学习笔记 ( 第九章 顺序容器)
- C++primer第五版笔记-第九章顺序容器
- 顺序容器——C++Primer第九章
- c++primer第九章顺序容器 小结--9
- HTML基础学习九
- 无法将grub-eif-amd64-signed软件包安装到/target/中
- 软件体系结构实现
- HDU
- MySQL获取数据库每个表的行数
- 《C++ Primer》读书笔记第九章-2-顺序容器操作 And vector增长问题
- (作业)Date、String、文件、URL
- 2017-2018SDUT个人训练赛第四场总结:我们愿意用更大的努力去换取更大的成功
- 系统性能优化总结—数据库设计
- 【笔记】《WebGL编程指南》学习-第2章WebGL入门(3-画一个点-版本1))
- Android RuntimePermissions运行时权限:单个运行时权限申请简例
- 21. Merge Two Sorted Lists。
- 整理Python find()、Python index()和Python List index()
- HDU 4614 Vases and Flowers