C++ nested iterators

百般思念 提交于 2019-12-10 10:45:33

问题


Is it OK to have a nested iterator like the following?

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

Note that j starts at i, and not list.begin(). Since the iterator is random access, can I guarantee that both i and j will have the same order? is there a better way of doing this?


回答1:


Your code is correct.

Both iterators will have the same order and incrementing j doesn't affect i as long as you don't make any operation that invalidates iterators (for example erasing from or pushing to vector).




回答2:


This is absolutely fine as long as you don't do anything inside the loops that might invalidate iterators.

(As an aside, list is a questionable name for a std::vector in my opinion.)




回答3:


That's perfectly fine. Random access doesn't mean random order. It means that you can jump through the container by using additive operators (+ and -) on your iterator. For example, with a random access iterator it, you can do it + 10. For an non-random access iterator, you would have to do it++ 10 times to achieve the same effect. (the std::advance function will encapsulate this for you though)




回答4:


This should work fine. Vector stores elements in order, and both iterators will obey this order.



来源:https://stackoverflow.com/questions/14924612/c-nested-iterators

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!