C++ Primer 笔记6

来源:互联网 发布:python 重定向 编辑:程序博客网 时间:2024/06/04 18:37
1、将一个容器复制给另一个容器时,类型必须匹配:容器类型和元素类型都必须相同。
2、尽管不能直接将一种容器内的元素复制给另一种容器,但系统允许通过传递一对迭代器间接实现该功能。使用迭代器时,不要求容器类型相同。容器内的元素类型也可以不相同,只要它们互相兼容,能够将要复制的元素转换为所构造的新容器的元素类型,即可实现复制。
3、C++语言中,大多数类型都可用作容器的元素类型。容器元素类型必须满足以下两个约束:
①、元素类型必须支持赋值运算。
②、元素类型的对象必须可以复制。
4、容器的容器:必须用空格隔开两个相邻的 >符号,以示这是两个分开的符号,否则,系统会认为>>是单个符号,为右移操作符,并结果导致编译时错误。
5、在容器中添加元素时,系统是将元素值复制到容器里。类似的,使用一段元素初始化新容器时,新容器存放的是原始元素的副本。被复制的原始值与新容器中的元素各不相关,此时,容器内元素值发生变化时,被复制的原值不会受到影响,反之亦然。
6、容器的比较是基于容器内元素的比较,容器的比较使用了元素类型定义的同一个关系操作符:两个容器做!=比较使用了其元素类型定义的!=操作符。如果容器的元素类型不支持某种操作符,则该类容器就不能做这种比较运算。且比较操作类似于string类型的关系运算。所有容器都通过比较其元素来实现关系运算。
7、c1.swap(c2) 交换内容:调用完该函数后,c1存放的是成c2原来的元素,c2中存放的则是c1原来的元素。c1和c2的类型必须相同。该函数的执行速度通常要比将c2的元素复制到c1的操作快。
8、assign操作首先删除容器中所有的元素,然后将其参数所指定的新元素插入到该容器中。不同(或相同)类型的容器内,元素类型不相同但是互相兼容,则其赋值运算必须使用assign函数。例如,可通过assign操作实现将vector容器中一段char*类型的元素赋给string类型的list容器。
9、capacity操作获取在容器需要分配更多的存储空间之前能够存储的元素总数,而reserve操作则告诉vector容器应该预留多少个元素的存储空间。 每当vector容器不得不分配新的存储空间时,以加倍当前容量的分配策略实现重新分配。(有的库这样做)
10、选择容器类型的法则:
① 如果程序要求随机访问元素,则应使用vector或deque容器
② 如果程序必须在容器的中间位置插入或删除元素,则应采用list容器
③ 如果程序不是在容器的中间位置,而是在容器首部或尾部插入或删除元素,则应采用deque容器
④ 如果只需在读取输入时在容器的中间位置插入元素,然后需要随机访问元素,则可考虑在输入时将元素读入到一个list容器,接着对此容器重新排序,使其适合顺序访问,然后将排序后的list容器复制到一个vector容器。
11、标准库还提供了三种顺序容器适配器:queue、priority_queue和stack。本质上,适配器是使一事物的行为类似于另一事物的行为的一种机制。容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。