qq_26163659
2015-02-28 10:45
采纳率: 36.4%
浏览 1.9k

C++迭代器和容器类怎么建立联系的?

我看了一些书 书上光说了迭代器怎么用,但是我不知道容器和迭代器怎么联系的,因为书上没有完整的代码。

比如说如下代码:
set actors1;
set actors2:
set result;
set::iterator role; ( 1 )
如上所示, 我不明白(1)那句是什么意思 难道说在容器类中已经定义了要使用的迭代器吗?
还是说这句话就建立了这个类和这个迭代器的联系。

之后的代码利用 copy 函数将actors1和actors2赋给了result 然后用左包含的方式遍历了整个数据项 那么迭代器是不是在copy过程中被改变了?书上还说如果改变基本容器,迭代器会失效,那它岂不是失效了?那么它又是什么确定的呢?应该是我理解有误吧?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • oyljerry 2015-02-28 12:16
    已采纳

    迭代器是模版,容器按照它的标准来进行元素遍历。
    改变容器的话,需要重新生成迭代器,不能用之前保存的迭代器,因为它还是用的之前位置。

    已采纳该答案
    打赏 评论
  • devmiao 2015-02-28 11:38

    看stl的源代码就知道了。无非就是循环,要看容器是链表还是数组。

    打赏 评论
  • 什么龙 2015-03-01 01:10

    代码写少了吧,一般使用为:
    set m; //或其它类型,作为介绍一般写为 set 这种泛型的
    然后使用迭代器:
    set::iterator it;
    it = m.begin();
    这样表面迭代器it当前值是容器m的开始,以后可以使用it++得到下一个迭代器。
    如果用循环可以使用:
    for(it = m.begin; it != m.end(); ++it)

    打赏 评论
  • 什么龙 2015-03-01 01:10

    代码写少了吧,一般使用为:
    set m; //或其它类型,作为介绍一般写为 set 这种泛型的
    然后使用迭代器:
    set::iterator it;
    it = m.begin();
    这样表面迭代器it当前值是容器m的开始,以后可以使用it++得到下一个迭代器。
    如果用循环可以使用:
    for(it = m.begin; it != m.end(); ++it)

    打赏 评论
  • wangicter 2015-03-03 10:13
    打赏 评论
  • Evankaka 2015-03-13 08:58

    其实这里可以看看设计模式中的迭代器模式,JAVA和STL中都 是这个思想的,你看看它们的UML图,找个实例,研究懂了就好了!

    打赏 评论

相关推荐 更多相似问题