《重学C++》9. C++进阶编程(二)迭代器、容器适配器、空间配置器

迭代器(iterator)

类似于关联容器,迭代器根据两个维度——指向的元素可变(const)逆序——被分为四种迭代器。

  • 正向迭代器 iterator
  • 常量正向迭代器 const_iterator
  • 反向迭代器 reverse_iterator
  • 常量反向迭代器 const_reverse_iterator

容器对迭代器的支持:

容器 迭代器功能
vector 随机访问
deque 随机访问
list 双向访问
set/multiset 双向访问
map/multimap 双向访问
stack 不支持迭代器
queue 不支持迭代器
priority_queue 不支持迭代器

容器适配器(adapter)

适配器包括三种:

  • stack
    LIFO,底层实现结构是deque;
  • queue
    FIFO,底层实现结构是deque;
  • priority_queue
    最大/最小堆(默认最大堆),自动在堆中进行堆排序,底层实现结构是vector或deque

使用很简单,push/push_back放入,top/front/back获取数据,pop/pop_front/pop_back删除数据。

官方文档
stack
http://www.cplusplus.com/reference/stack/stack/?kw=stack
queue
http://www.cplusplus.com/reference/queue/queue/?kw=queue
priority_queue
http://www.cplusplus.com/reference/queue/priority_queue/?kw=priority_queue

空间配置器(allocator)

空间配置器功能强大,负责为底层数据的存储提供服务,它不仅可以在内存上分配空间,甚至可以在硬盘上分配空间。

……这部分比较难,视频没看懂,后面有时间再研究。推荐这部分的经典书籍《STL源码剖析》。

  • STK 的六大组件给软件编程带来了新的多态复用,是现代C++语言高效的精髓;
  • 泛型和STL的学习路线很陡,建议初学者先学会基本使用和简单扩展;
  • 掌握了一定基础的情况下,可以通过进一步学习和分析源码,编写自己的组件来提升能力;

trivial:内置类型
non_trivial:非内置类型

C++ STL 空间配置器
https://blog.csdn.net/lisemi/article/details/100894471

Boost库

Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,由Boost社区组织开发、维护,Boost库可以与C++标准库完美共同工作,并且为其提供扩展功能,包括字符串和文本处理库、容器库、算法库、函数对象和高阶编程库、综合类库等等。

现在很多优秀的算法已经被放入C++11,不需要为了用Boost而专门去学。

学习C++有没有必要学习boost库?
https://www.zhihu.com/question/39817943