您的位置:首页 > 其它

容器类的迭代器讨论

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--)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: