C++primer笔记————第五章

抽象容器类型
  1. 顺序容器拥有由单一类型元素组成的有序集合。主要用到的有list、vector和deque(双端队列)
  2. 关联容器支持查询一个元素是否存在,并且可以有效地获取元素,两个基本的关联容器类型是map(映射)和set(集合),map和set都只包含每个键的唯一出现,即每个键只允许出现一次。multimap和multiset支持同一个键的多次出现。
  3. 在现实世界中,用户的便利性总是要优先于实现上的便利性。
  4. list、vector和deque都是动态增长的,摘这三者中选择的准则主要是关注插入特性以及对元素的后续访问要求等。
  5. vector的随机访问效率很高,但是在任意位置(非末尾)插入或者删除效率很低。
  6. list任意位置插入和删除效率很高,但是随机访问的效率并不高,并且每个元素还有两个指针的而额外空闲开销。
  7. 选择顺序容器的一些准则。
    1. 如果我们需要随机访问一个容器。那么vector要比list好的多。
    2. 如果我们已知要存储元素的数目,那么vector也是要比list好的多。
    3. 如果我们需要的不只是在容器两端插入和删除元素,那么list显然要比vector好。
    4. 除非我们需要在容器首部插入和删除元素,否则vector要比deque好。
  8. 如果vector的元素是类对象,那么拷贝和释放内存可能需要对每个元素依次调用拷贝构造和析构函数。
  9. 实际上,由于vector每次增加自身内存时将增加比所需要的更多的内存,因此对于小的对象来说,vector比list效率更高。
  10. 数据类型的长度并不是影响容器性能的唯一标准,数据类型的复杂性也会影响到元素插入的性能。
  11. 对于大型复杂类来说,如果想要增加vector的性能,那么通过存储指向复杂类对象的指针是一个经常使用的方案。原因是容量增加并且指向类对象的指针的拷贝和释放不需要调用类的拷贝构造函数和析构函数。
  12. 容器中的每个元素都被初始化为“与该类型相关联的默认值”。
  13. 容器的比较是指两个容器的元素之间成对进行比较。
  14. 我们定义的容器有三个限制
    1. 元素类型必须支持等于操作符。
    2. 元素类型必须支持小于操作符。
    3. 元素类型必须支持默认值(对于类类型,即指默认构造函数)。
  15. 迭代器提供了一种一般化的方法,对顺序或关联容器类型中的每个元素进行连续访问。
  16. 容器类型所提供的end()方法返回一个iterator,它指向容器末尾元素的下一个位置。
  17. iterator算术运算只适用于vector或者deque,但是不适用于list,因为list的元素在内存中不是连续存储的。
  18. 容器对象也可以用“由一对iterator标记的起始元素和末尾元素后一个位置之间的拷贝”来初始化。
  19. 栈类型被称为容器适配器,因为它把栈抽象施加在底层容器集上。在默认情况下,栈用deque实现。
文章目录
  1. 1. 抽象容器类型
,