容器类的迭代器讨论

 

 

一级容器包括“顺序容器”和“关联容器”,容器适配器不属于一级容器

迭代器用于访问和控制一级容器中的元素

为什么容器适配器不支持?因为容器适配器依赖某一种具体容器实现。

前向迭代器也可以支持前向++和后向++
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--)

 

posted on 2015-08-26 08:42  依风152  阅读(517)  评论(0编辑  收藏  举报