C++Primer学习笔记(3)

来源:互联网 发布:c语言socket编程小例子 编辑:程序博客网 时间:2024/05/17 01:28

容器适配器:

1.默认的stack和queue都基于deque容器实现,而priority_queue则在vector容器上实现。stack栈可以建立在vector、list、或者deque容器之上,而queue适配器要求其关联的基础容器必须提供push_front运算,因此只能建立在list容器或deque容器上,而不能建立在vector容器上。priority_queue适配器要求提供随机访问功能,因此可建立在vector或deque容器上,但不能建立在list容器上。


2.map的下标也使用索引来获取键所关联的值,如果该键已在容器中,则map的下标运算与vector的下标运算行为相同(返回该键所关联的值),只有在所查找的键不存在时,map容器才为该键创建一个新的元素,并将它插入到此map对象中。此时,所关联的值采用值初始化;类类型的元素用默认构造函数初始化,而内置类型的元素则初始化为0.


泛型算法:

list<string>::iterator it = roster1.begin();

find_first_of(it, roster1.end(), roster2.begin(), roster2.end());

find_first_of带有两对迭代器参数,每对迭代器中,两个实参的类型必须精确匹配,但不要求两对之间的类型匹配。

比如:roster1可以是list对象,而roster2则可以是vector对象、deque对象或者是其他序列,只要这两个序列的元素可使用(==)操作符进行比较即可。如果roster1是list<string>对象,则roster2可以是vector<char*>对象,因为string标准库为string对象与char*对象定义了(==)操作符.

迭代器插入元素都是在指定迭代器的前面插入元素的。


map、set和list类型提供双向迭代器(读写,++,--),而string、vector和deque容器上定义的迭代器都是随机访问迭代器(<,>,<=,>=,最突出的是可以与n进行加减法),用作访问内置数组元素的指针也是随机访问迭代器。istream_iterator是输入迭代器,而ostream_iterator则是输出迭代器.

排序默认使用<操作符,查找默认使用==操作符。

对于list对象,应该优先使用list容器特有的成员版本,而不是泛型算法。

原创粉丝点击