C ++嵌套迭代器

时间:2013-02-17 18:37:27

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

是否可以使用如下的嵌套迭代器?

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具有相同的顺序吗?有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

您的代码是正确的。

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

答案 1 :(得分:3)

只要您不在里面可能使迭代器无效的循环中执行任何操作,这绝对没问题。

(另外,list在我看来是std::vector的可疑名称。)

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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