核心简记
顺序容器:以位置保存元素。关联容器:以关键字保存元素
关联容器分为如下:
按map|set、有序|无序、不重复|重复
map、multimap定义在map。set与multiset定义在set。无序定义在unordered_map与unordered_set中。
都是模板定义。
简单使用:
c++对象构造:
用 A()可以调用构造返回匿名的对象。对类直接使用()为调用构造
关联容器概述
所有关联容器都支持之前定义的容器通用操作。
关联容器的迭代器都是双向的。
构造函数可:空、拷贝、迭代器范围拷贝、列表。非multi会自动去重复
对有序容器,要求关键字定义<。定义符合:俩个关键字不同时<=对方、可传递、俩个关键字不<=对方则相等。
可以传入比较函数:因为元素的操作类型属于容器类型的一部分,因此要提供此类型
pair:表示俩个数据成员,定义在utility
注意其成员是public的
关联容器的操作
为有序与无序的通用操作。
类型
额外的类型:使用::
迭代器
当解引用关联容器的迭代器,得到的类型为value_type的引用。
set的迭代器是const的。有序时迭代器按关键字升序遍历。
迭代器不适合泛型算法,可当做源或目的位置
添加元素
|
|
删除元素
|
|
下标操作
|
|
如:a[1]=1;
将执行:
- 在a中找关键字1
- 未找到就将新关键字1插入,并值初始化
- 提出新插入的元素,将值1赋予
set不可,没有值。下标访问返回的是值,不是整体了。不想添加用find。
访问元素
|
|
无序容器
无序容器特有一些操作,之前的是通用的,如迭代器仍然可以遍历,只不过顺序不保证。相同的关键字在无序中仍然相邻!
无序关联容器采用hash函数与关键字类型的==组织元素。新能依赖函数质量与桶数量大小。
无序容器管理操作
无序容器要求使用关键字的==与hash< key>类型的对象。每个标准库类型都有hash< type>。自定义的类型必须提供hash模板版本-见模板章节
在这里还可以自定义操作:
反汇编
无反汇编新知识。有一句感慨…cpp的语法操作大量渗透到了编译器的前端阶段,用的好的话确实无敌….