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?
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 astd::vector
in my opinion.)Your code is correct.
Both iterators will have the same order and incrementing
j
doesn't affecti
as long as you don't make any operation that invalidates iterators (for example erasing from or pushing to vector).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 iteratorit
, you can doit + 10
. For an non-random access iterator, you would have to doit++
10 times to achieve the same effect. (thestd::advance
function will encapsulate this for you though)This should work fine. Vector stores elements in order, and both iterators will obey this order.