【问题标题】:C++ nested iteratorsC++ 嵌套迭代器
【发布时间】:2013-02-17 18:37:26
【问题描述】:

可以像下面这样嵌套迭代器吗?

for (vector<type>::iterator i = list.begin(); i != list.end(); ++i) {
    for (vector<type>::iterator j = i; j != list.end(); ++j) {
        ...
    }
}

请注意,ji 开头,而不是 list.begin()。由于迭代器是随机访问的,我能保证ij 的顺序相同吗?有更好的方法吗?

【问题讨论】:

  • 你没有嵌套迭代器(这本身没有意义)。您正在嵌套循环并复制迭代器。这里没有什么奇怪的。

标签: c++ iterator nested-loops random-access


【解决方案1】:

你的代码是正确的。

两个迭代器将具有相同的顺序并且递增 j 不会影响 i,只要您不进行任何与 invalidates iterators 相同的操作(例如从向量中擦除或推送到向量)。

【讨论】:

【解决方案2】:

这绝对没问题,只要您在内部不做任何可能使迭代器无效的循环。

(顺便说一句,在我看来,liststd::vector 来说是个有问题的名字。)

【讨论】:

  • +1 表示选择标准容器的名称作为变量的名称。我最近经常看到这种情况(arraylistmap 等)。
  • 实名当然不是列表,只是缩短了,以便在本论坛阅读。
【解决方案3】:

这很好。随机访问并不意味着随机顺序。这意味着您可以通过在迭代器上使用加法运算符(+-)来跳过容器。例如,使用随机访问迭代器it,您可以执行it + 10。对于非随机访问迭代器,您必须执行 it++ 10 次才能达到相同的效果。 (std::advance 函数会为您封装)

【讨论】:

    【解决方案4】:

    这应该可以正常工作。 Vector按顺序存储元素,两个迭代器都会遵循这个顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 2012-12-28
      相关资源
      最近更新 更多