再学C++ Primer(9)-顺序容器
来源:互联网 发布:简单拼图软件 编辑:程序博客网 时间:2024/06/06 08:30
顺序容器:
vector: 支持快速随机访问;
list:支持快速插入/删除,类似与链表
deque:双端队列。
使用默认构造函数能达到最佳运行时性能,并使容器更易使用。
将一个容器初始化为另一个容器的副本:
vector<int> ivec;
vecror<int> ivec2(ivec);
容器类型和元素类型都必须相同。
接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不支持这种初始化。
容器元素类型必须满足以下两个约束:
1)元素类型支持赋值运算;
2)元素类型的对象必须可以复制
使用迭代器编写程序时,必须留意哪些操作会使迭代器失效,(如元素的增加和删除)。
使用无效的迭代器将会导致严重的运行错误,当编写循环将元素插入到vector或deque容器
时,程序必须确保迭代器在每次循环后都得到更新。
reverse_iterator:逆迭代器,按逆序寻址的迭代器,从后向前遍历容器,并反转了某些
相关的迭代器操作。
容器的关系操作符:类似于字符串的关系运算,且只允许两个容器做其元素类型定义的关系运算。
容器的assign操作:赋给容器全新值,操作首先会删除容器中原来存储的所有元素。 有两个版本。
容器的swap操作:不会删除或插入任何元素,而且在常量时间内实现交换。
例子:
Output:
Size of first: 3
Size of second: 7
每当vector容器不得不分配新的存储空间时,以加倍当前容量的分配策略重新分配。
以最小的代价连续存储元素。由此而带来的访问元素的便利弥补了其存储代价。
容器的特点及选择:
选择容器要考虑的问题:
1)在容器的中间位置添加或删除元素的代价;
2)执行容器元素的随机访问的代价。
vector和deque:优点:快速随机访问;缺点:任意位置插入或删除元素代价大,类似数组。
list:优点:在任意位置都能快速插入和删除;缺点:随机访问慢,类似链表;
deque和vector的一个不同点:deque提供高效地在其首部实现insert和erase的操作,就像在容器尾部一样。
在deque容器首部或尾部插入元素不会使任何迭迭代器失效。
由于vector容器的每次访问都是距离其起点的固定偏移,因此其随机访问非常有效率。在list容器中,元素之间移动的唯一
方法是顺序跟随指针。
选择容器的原则:
1)如果程序要求随机访问元素,则选deque或vectore;
2)如果程序必须在容器的中间位置插入或删除元素,则应采用list容器;
3)如果程序不是在容器的中间位置,而是在容器首部或尾部插入或删除元素,则采用deque;
4)如果只需要在读取输入时在容器的中间位置插入元素,然后需要随机访问元素,则可考虑在输入时将元素读入到一个
list容器,接着对此容器排序,使其适合顺序访问,然后将排序后的list容器复制待一个vector中。
总之,决定使用哪种容器可能需要剖析各种容器类型完成应用所要求的各类操作的性能。
priority-queue:优先队列,插入元素的话将其放在优先级低的元素前面。
vector: 支持快速随机访问;
list:支持快速插入/删除,类似与链表
deque:双端队列。
使用默认构造函数能达到最佳运行时性能,并使容器更易使用。
将一个容器初始化为另一个容器的副本:
vector<int> ivec;
vecror<int> ivec2(ivec);
容器类型和元素类型都必须相同。
接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不支持这种初始化。
容器元素类型必须满足以下两个约束:
1)元素类型支持赋值运算;
2)元素类型的对象必须可以复制
使用迭代器编写程序时,必须留意哪些操作会使迭代器失效,(如元素的增加和删除)。
使用无效的迭代器将会导致严重的运行错误,当编写循环将元素插入到vector或deque容器
时,程序必须确保迭代器在每次循环后都得到更新。
reverse_iterator:逆迭代器,按逆序寻址的迭代器,从后向前遍历容器,并反转了某些
相关的迭代器操作。
容器的关系操作符:类似于字符串的关系运算,且只允许两个容器做其元素类型定义的关系运算。
容器的assign操作:赋给容器全新值,操作首先会删除容器中原来存储的所有元素。 有两个版本。
容器的swap操作:不会删除或插入任何元素,而且在常量时间内实现交换。
例子:
#include <iostream>#include <list>using namespace std;int main (){list<int> first;list<int> second;first.assign (7,100); // 7 ints with value 100second.assign (first.begin(),first.end()); // a copy of firstint myints[]={1776,7,4};first.assign (myints,myints+3); // assigning from arraycout << "Size of first: " << int (first.size()) << endl;cout << "Size of second: " << int (second.size()) << endl;return 0;}
Output:
Size of first: 3
Size of second: 7
每当vector容器不得不分配新的存储空间时,以加倍当前容量的分配策略重新分配。
以最小的代价连续存储元素。由此而带来的访问元素的便利弥补了其存储代价。
容器的特点及选择:
选择容器要考虑的问题:
1)在容器的中间位置添加或删除元素的代价;
2)执行容器元素的随机访问的代价。
vector和deque:优点:快速随机访问;缺点:任意位置插入或删除元素代价大,类似数组。
list:优点:在任意位置都能快速插入和删除;缺点:随机访问慢,类似链表;
deque和vector的一个不同点:deque提供高效地在其首部实现insert和erase的操作,就像在容器尾部一样。
在deque容器首部或尾部插入元素不会使任何迭迭代器失效。
由于vector容器的每次访问都是距离其起点的固定偏移,因此其随机访问非常有效率。在list容器中,元素之间移动的唯一
方法是顺序跟随指针。
选择容器的原则:
1)如果程序要求随机访问元素,则选deque或vectore;
2)如果程序必须在容器的中间位置插入或删除元素,则应采用list容器;
3)如果程序不是在容器的中间位置,而是在容器首部或尾部插入或删除元素,则采用deque;
4)如果只需要在读取输入时在容器的中间位置插入元素,然后需要随机访问元素,则可考虑在输入时将元素读入到一个
list容器,接着对此容器排序,使其适合顺序访问,然后将排序后的list容器复制待一个vector中。
总之,决定使用哪种容器可能需要剖析各种容器类型完成应用所要求的各类操作的性能。
priority-queue:优先队列,插入元素的话将其放在优先级低的元素前面。
- 再学C++ Primer(9)-顺序容器
- 《C++primer》 顺序容器
- C++Primer 顺序容器
- 【重学《C++Primer第四版》】第九章第十章、容器(顺序容器和关联容器)
- C++Primer学习笔记(9)顺序容器
- C++primer 顺序容器(1)
- C++primer 顺序容器(2)
- C++primer 顺序容器(3)
- C++primer【笔记】 顺序容器
- c++primer之顺序容器(容器库概览)
- 【C++primer学习笔记】第9章 顺序容器
- 《C++Primer》读书笔记——第9章 顺序容器
- c++primer第九章顺序容器 小结--9
- c++primer学习笔记 ( 第九章 顺序容器)
- 细嚼慢咽C++primer(5)——顺序容器
- c++primer之顺序容器(添加元素)
- c++primer之顺序容器(访问元素)
- C++ primer(九)再谈容器之顺序容器
- 利用HttpHandler 调用不同的Css文件
- mvc
- 如何从零开始开发一款嵌入式产品
- nginx pk apache 2.4全过程系列即将公布
- 深入理解HTTP Session
- 再学C++ Primer(9)-顺序容器
- SEO笔记——百度站长平台的全方位解答
- 经典SQL语句
- 如何在windows平台下的ActiveTcl中设置环境变量
- Flex服务器端SQL(Ibatis)中使用嵌套List的方法
- WPF中平铺的问题,完美解决
- 再学C++ Primer(8)-标准IO库
- SEO笔记——站内优化四要素提高排名
- IFrame引用跨域站点页面时,Session失效问题