2

有一个像下面这样的嵌套迭代器可以吗?

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

请注意,j从 开始i,而不是list.begin()。由于迭代器是随机访问的,我可以保证两者ij将具有相同的顺序吗?有更好的方法吗?

4

4 回答 4

4

你的代码是正确的。

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

于 2013-02-17T18:39:28.023 回答
3

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

于 2013-02-17T18:40:18.330 回答
3

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

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

于 2013-02-17T18:39:29.357 回答
1

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

于 2013-02-17T18:40:54.580 回答