- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
容器学习笔记
容器学习笔记(C++Primer4)
1.标准库定义了三种顺序容器类型:vector,list 和 deque(双端队列);
2.标准库还提供了三种容器适配器:stack,queue 和 priority_queue (优先队列);
3.vector 支持快速随机访问 ,list 支持快速插入/删除,deque 双端队列 ;
4.容器适配器:stack后进先出(LIFO)堆栈,queue 先进先出(FIFO)队列,
priority_queue 有优先级管理的队列;
5.所有的容器都是类模板;要定义具体的容器,必须在容器名后加一对尖括号,
尖括号里面提供容器中存放的元素的类型;
6.所有容器类型都定义了默认构造函数,用于创建指定类型的空容器对象:
CT c; 创建一个名为 c 的空容器;C 是容器类型名,如 vector,T 是元素
类型,如 int 或 string 适用于所有容器;
C c(c2); 创建容器 c2 的副本 c;c 和 c2 必须具有相同的容器类型,并存放
相同类型的元素;适用于所有容器;
C c(b,e); 创建 c,其元素是迭代器 b 和 e 标示的范围内元素的副本;不要求
容器类型相同,也不要求元素类型相同,只要兼容即可转换为所构建新容器
的元素类型;适用于所有容器;
C c(n, t); 用 n 个值为 t 的元素创建容器 c,其中值 t 必须是容器类型 C 的
元素类型的值,或者是可转换为该类型的值;只适用于顺序容器
C c(n); 创建有 n 个值初始化(第 3.3.1 节)(value-initialized)元素
的容器 c;只适用于顺序容器
7.容器内元素的类型约束 a) 元素类型必须支持赋值运算;b)元素类型的对象
必须可以复制; c) 关联容器的键类型还需满足其他的约束
8.a)除了引用类型外,所有内置或复合类型都可用做元素类型;引用不支持
一般意义的赋值运算,因此没有元素是引用类型的容器;
b)容器本身也满足上述要求,因此,可以定义元素本身就是容器类型的容器;
c)IO 库类型不支持复制或赋值;因此,不能创建存放 IO 类型对象的容器;
9.如果容器存储类类型的对象,那么只有当其元素类型提供默认构造
函数时,容器才能使用这种构造函数;
例如:假设类 Foo 没有默认构造函数,但提供了需要一个 int 型形参的
构造函数。现在,考虑下面的声明:
vectorFoo empty; // ok: no need for element default constructor
vectorFoo bad(10); // error: no default constructor for Foo
vectorFoo ok(10, 1); // ok: each element initialized to 1
10.容器的迭代器与迭代器范围
a)顺序容器迭代器提供简单的解引用;自增,自减(算术)及相等,不等(逻辑)运算
b)vector 和 deque 容器的迭代器提供额外的运算
vectorint::iterator iter = vec.begin() + vec.size()/2;
c)list 容器的迭代器既不支持算术运算(加法或减法),也不支持关系运算
ilist.begin() + ilist.size()/2; // error:
11.C++ 使用一对迭代器标记迭代器范围(iterator range),这两个迭代
器分别指向同一个容器中的两个元素或超出末端的下一位置(左闭合区间)
12.迭代器供运算是使用标准库算法的基础;
13.迭代器范围这个概念是标准库的基础
a)第二个迭代器从来都不是指向元素范围的最后一个元素, 而是指向最后一
个元素的下一位置;
b)使用迭代器编写程序时,必须留意哪些操作会使迭代器失效;
使用无效迭代器将会导致严重的运行时错误;
14.每种顺序容器都提供了一组有用的类型定义以及以下操作:
a) 在容器中添加元素; b) 在容器中删除元素; c)设置容器大小;
d) (如果有的话)获取容器内的第一个和最后一个元素;
15.可以用插入操作在容器任意位置添加元素:
c.inser(p,t)/c.insert(p,n,t)/c.insert(p,b,e)
16.list容器不支持下标操作
所有顺序容器都支持 push_back 操作
list 和 deque 容器类型还提供了类似的操作:push_front
17.添加元素可能会使迭代器失效
vectorint::iterator first = v.begin(),
文档评论(0)