关于首类容器中常见的typedef,它们方便于对容器相关的类型进行声明,优点是可移植性高。
例如对于list来说,list::value_type i就表示存放的是int;当在一个平台上需要改为list的实现,不需要修改引用这个类型的源代码。
另一方面,对于typedef map mic 来说,使用
micp::value_type(i, str)事实上声明了该元素的变量,而且调用了构造函数。
也就是说micp::value_type可以视为一个class。
容器内部typedef的类型 value_type 容器中存放元素的类型
reference 容器中存放元素类型的引用
const_reference 容器中存放元素类型的常量引用
pointer 容器中存放元素类型的指针
iterator 指向容器中存放元素类型的迭代器
const_iterator 容器中存放元素类型的常量迭代器
reverse_iterator 指向容器中存放元素类型的逆向迭代器
const_reverse_iterator 指向容器中存放元素类型的常量逆向迭代器
difference_type 引用相同容器的两个迭代器相减结果的类型
(list和关联容器没有定义operator-)
size_type 用于计算容器中项目数和检索顺序容器的类型 (不能对list检索,就是[]对list是没有定义的。因为这个 运算符要随机迭代器支持)
key_type 关联容器的key的类型。 data_type pair关联容器的数据部分的类型 |
容器支持的迭代器类型体现了容器的抽象意义,决定了容器支持的算法和容器支持的操作。
容器支持的迭代器类型
顺序容器 vector 随机访问迭代器 deque 随机访问迭代器
list 双向迭代器
关联容器 双向迭代器 容器适配器 不支持迭代器 |
迭代器可以执行的操作,是迭代器抽象的体现。
迭代器操作
适用于所有迭代器 ++p p++ *p p=p1 输入迭代器 输出迭代器 (从容器中读取) (输出到容器) p==p1 \ / p!=p1 \ / \ / \/ 正向迭代器 |
|
双向迭代器
--p | p-- | 随机访问迭代器 p+=i-------| p-=i \
p+i 索引
p-i /
p[i]-------|
p \
p<=p1 不等式操作
p>p1 /
p>=p1------|
|
阅读(1547) | 评论(0) | 转发(0) |