zoukankan      html  css  js  c++  java
  • 容器类的迭代器讨论

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

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

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

    前向迭代器也可以支持前向++和后向++
    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--)
  • 相关阅读:
    windows 10 下部署WCF 一些细节
    系统提示 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。
    zookeeper常用命令
    zookeeper安装与配置
    Java访问者模式
    总结设计模式—(大话设计模式下篇)
    总结设计模式—(大话设计模式中篇)
    总结设计模式—(大话设计模式上篇)
    Java中间缓存变量机制
    解释模式
  • 原文地址:https://www.cnblogs.com/wuqi/p/4756028.html
Copyright © 2011-2022 走看看