《C++ Primer》读书笔记第九章-2-顺序容器操作 And vector增长问题
2017-09-19 23:09
281 查看
笔记会持续更新,有错误的地方欢迎指正,谢谢!
insert允许我们在容器任意位置中插入多个元素,vector,deque,list,string都支持。
总结:调用insert会在前一个位置插入,相当于调用了push_front。
用一个对象来初始化或插入容器时,实际上放入的是拷贝,容器中元素与提供值的对象无任何关系。
每个顺序容器都有一个front(),返回首元素的引用;除forward_list之外的都有一个back(),返回尾元素的引用。
如果当前大小大于所要求的的大小,容器后面的元素会被删除。
如果当前大小小于新大小,会填充指定值或默认初始值对象。
缩小容器,指向被删除元素的迭代器、引用和指针都会失效。
内容省略,希望规范使用容器,None失效!
把已有元素移动到新空间中
然后添加新元素
释放旧存储空间 那么问题又来了,我们的新空间要分配多大呢?一般来说貌似是旧空间的两倍,反正就是会预留一些空间。
顺序容器操作
前面介绍的那些是所有容器(顺序容器+关联容器)都支持的,我们接下来介绍的只适用于顺序容器。向顺序容器添加元素
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个42 a.resize(15); //后面再加5个0,是默认初始化的 a.resize(25, -1); //后面再加10个-1 a.resize(5); //从末尾删除20个元素,就剩5个42 //如果是类类型,要么就有默认构造函数,要么就提供初始值
缩小容器,指向被删除元素的迭代器、引用和指针都会失效。
容器操作可能使迭代器失效
不保存尾后迭代器:在循环中插入删除deque、string、vector中的元素,应每次重新调用end()。内容省略,希望规范使用容器,None失效!
vector增长问题
如果我在添加元素的时候,没有空间去容纳新元素应该怎么办呢?vector是这么做的:把已有元素移动到新空间中
然后添加新元素
释放旧存储空间 那么问题又来了,我们的新空间要分配多大呢?一般来说貌似是旧空间的两倍,反正就是会预留一些空间。
成员函数 | 作用 |
---|---|
c.size() | 返回目前含有元素的数量 |
c.capacity() | 返回所能保存的最大元素数量,只适用vector和string |
c.shrink_to_fit() | 将capacity()减小为size()相同大小(适用vector、string、deque) |
相关文章推荐
- 《C++ Primer》读书笔记第九章-1- 顺序容器概述 And 容器库概览
- C++ Primer : 第九章 : 顺序容器的操作以及迭代器失效问题
- 《C++ Primer》读书笔记第九章-3-额外的string操作 And 容器适配器
- 《C++ Primer》读书笔记-第九章 03 顺序容器操作
- 【C++ Primer】【学习笔记】【第九章】顺序容器之:vector容器的自增长
- C++ primer 读书笔记 第九章 顺序容器
- c++ primer 读书笔记 第九章 顺序容器有那些 vector list deque stack queue priority-queue
- 《C++ Primer》读书笔记——第九章_顺序容器
- 《C++ Primer》读书笔记-第九章 04 vector对象增长
- C++ Primer : 第九章 : vector变长、string的其他操作以及容器适配器
- 【C++ Primer】【学习笔记】【第九章】顺序容器之:顺序容器的操作
- 读书笔记《C++ Primer》第五版——第九章 顺序容器
- 《C++ Primer》读书笔记-第九章 01 顺序容器
- c++ primer(第五版)学习笔记及习题答案代码版(第九章)顺序容器
- c++ Primer 学习笔记 第九章----顺序容器
- 【C++ Primer】【学习笔记】【第九章】顺序容器之:迭代器和迭代器范围
- C++ Primer : 第九章 : 顺序容器的定义、迭代器以及赋值与swap
- C++ Primer 学习笔记_28_STL实践与分析(2) --顺序容器的操作(上)
- 实验测试2《C++ Primer》第五版——第九章 顺序容器
- 顺序容器 - 1【C++ Primer 学习笔记 - 第九章】