Re: plain iterators and reverse iterators on vector
subramanian100in@yahoo.com, India wrote:
Consider the following program x.cpp:
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> c;
for (int i = 0; i != 10; ++i)
c.push_back(i);
cout << c.end() - c.begin() << endl;
cout << c.rend() - c.rbegin() << endl;
return EXIT_SUCCESS;
}
I compiled with g++3.4.3 as
g++ -std=c++98 -pedantic -Wall -Wextra x.cpp
When I ran it, it produced the output
10
10
The first 10 in the output is fine. It corresponds to c.end() - c.begin
().
Shouldn't the second 10 in the output be -10 because I am using
reverse iterators in calculating c.rend() - c.rbegin() ie isn't this
expression equivalent to c.begin() - c.end() in which case -10 would
be printed? Is my understanding wrong ?
It would seem that you misunderstand the iterator operations.
To move from a "start" iterator (whether it's returned by 'begin()' or
'rbegin()') to the "finish" iterator (whether it's return by 'end()' or
'rend()') you need to *increment* the iterator (use the ++ operator).
That means that the "finish" iterator is "greater" than the "start".
That, it turn means (for 'std::vector' only, since its iterators are
random-access) that when you subtract "start" from "finish", you should
get a positive value.
Is the difference operator-() between the RandomAccessIterators
defined in <iterator> ?
Probably.
> If so, how does the program compile even when
I do not #include <iterator> ?
It must be included for you by <vector> or maybe <iostream>. Who knows?
If you need to be explicit, include it yourself, there's no harm in that.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask