是否可以使用如下的嵌套迭代器?
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()
。由于迭代器是随机访问,我可以保证i
和j
具有相同的顺序吗?有更好的方法吗?
答案 0 :(得分:4)
您的代码是正确的。
两个迭代器都具有相同的顺序,只要您不进行invalidates iterators的任何操作(例如擦除或推送),递增j
不会影响i
矢量)。
答案 1 :(得分:3)
只要您不在里面可能使迭代器无效的循环中执行任何操作,这绝对没问题。
(另外,list
在我看来是std::vector
的可疑名称。)
答案 2 :(得分:3)
这很好。随机访问并不意味着随机顺序。这意味着您可以在迭代器上使用加法运算符(+
和-
)跳过容器。例如,使用随机访问迭代器it
,您可以执行it + 10
。对于非随机访问迭代器,您必须执行it++
10次才能获得相同的效果。 (std::advance
函数将为您封装此内容)
答案 3 :(得分:1)
这应该可以正常工作。 Vector按顺序存储元素,两个迭代器都将遵循此顺序。