容器类的迭代器讨论
2015-08-26 08:42
246 查看
一级容器包括“顺序容器”和“关联容器”,容器适配器不属于一级容器 迭代器用于访问和控制一级容器中的元素 为什么容器适配器不支持?因为容器适配器依赖某一种具体容器实现。 | |
前向迭代器也可以支持前向++和后向++ | |
lis支持双向迭代器,然而queue是容器适配器,不支持迭代器 | |
输入迭代器用于读入数据,输出迭代器用于写入数据,所以输出迭代器用于左值 | |
stack是容器适配器,不可使用迭代器 | |
存入set后,会按照规则排序(默认从小达到排序) | |
int main() { list<int> ilist; list<int>::iterator it1 = ilist.begin(); list<int>::iterator it2 = ilist.end(); if (it1 > it2) { cout << "it1 > it2" << endl; } return 0; } 在下面具体分析。 |
1、it1,it2不可以比较大小,因为it1,it2是list的迭代器,是双向迭代器
2、it3,it4可以比较大小,因为it3,it4是vector的迭代器,支持随机迭代器
首先讨论一点,为什么vector,deque支持随机迭代器,list不支持随机迭代器?
vector,deque是线性结构,可以随机访问
list是链表是结构,不能随机访问
双向迭代器不可以比较大小,随机迭代器可以比较大小
双向迭代器不可以比较大小,因为其所指的,在一条链表上的元素的地址不是连续的,比较大小没有意义
随机迭代器可以比较大小,因为其所指的,在一个连续空间中的元素的地址是连续的,比较大小有意义
尽量使用
for(itr3=li3.begin();itr3 != li3.end();itr3++)
而不是
for(itr3=li3.begin();itr3 < li3.end();itr3++)
因为,前者对于各种迭代器均通用,后者只对随机迭代器通用,而且,一旦考虑从后向前遍历,就需要改变"<"为">",比如
for(itr3=li3.rbegin();itr3 > li3.rend();itr3--)
相关文章推荐
- oracle监听和实例启动顺序浅谈
- poj1562&&hdoj1241Oil Deposits
- java之异常处理
- POJ-1019-Number Sequence-组合数学
- 设计模式—那点事儿
- Android 完美实现图片圆角和圆形(对实现进行分析)
- 在一个服务器上搭建好php环境,在服务器上可以访问,其他机器可以访问服务器但网页无法访问
- Linux系统环境下关于多进程并发写同一个文件的讨论
- EBS-如何查看非自己提交的请求的结果
- 黑马程序员——Java 基础 面向对象之多态 (复习)
- 移动APP整体策划-007-App界面交互设计规范
- 【HDOJ 4277】 USACO ORZ (暴搜+剪枝+去重)
- Lucene.Net
- 从零开始带你认识最新的图片格式WEBP
- Linux下多线程2——程序运行
- 移动APP整体策划-006-App界面设计风格
- 渐变色背景
- 文件类型及相关打开程序的注册
- 我的PSoC学习(四)(PSoC Creator 2.0+win7+CY8C38):温控系统PSoC编程需要注意的点
- 移动APP整体策划-005-App升级系统策划方案