容器类的迭代器讨论
一级容器包括“顺序容器”和“关联容器”,容器适配器不属于一级容器 迭代器用于访问和控制一级容器中的元素 为什么容器适配器不支持?因为容器适配器依赖某一种具体容器实现。 |
|
前向迭代器也可以支持前向++和后向++ | |
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--)