Re: list::end() decrement
On Sunday, July 22, 2012 10:24:58 AM UTC+4:30, JC wrote:
Just to make sure, is the pre/post decrement operator valid on list::end(=
)? In particular, assuming a non-empty, non-volatile list, will...
list<x> alist = ...; // non-empty
list<x>::iterator lastiter = -- alist.end();
... always result in lastiter being a valid forward iterator for the last=
element in alist?
The reason I'm asking is because the only reference I was able to fin=
d was at http://www.sgi.com/tech/stl/BackInsertionSequence.html, which is t=
rustworthy, but I wasn't able to find the validity explicitly stated an=
ywhere (not that it isn't, I just couldn't find it).
Thanks!
J
Hi
I reviewed the C++ final draft international standard (N3290), quickly,
but I didn't find anything specific about end() iterator decrement.
BTW, I compiled and ran the following program under GCC 4.7.0
in two cases: list is empty and list isn't empty. It was fine:
#include <list>
#include <iostream>
int main()
{
using namespace std;
list<int> a_list = {0, 1, 2};
list<int>::iterator last_iter = --a_list.end();
cout << *last_iter << '\n';=09
return 0;
}
I use the following command:
$ g++ -pedantic -pedantic-errors -std=c++11 list_end_iter.c++
$ ./a.out
2
If the list is empty, 0 is the output.
Also, I compiled and ran the following program under Visual Studio 2008:
#include <list>
#include <iostream>
int main()
{
using namespace std;
list<int> a_list;
a_list.push_back(0); a_list.push_back(1); a_list.push_back(2);
list<int>::iterator last_iter = --a_list.end();
cout << *last_iter << '\n';
return 0;
}
It was OK, and the output is 2, but if the list is empty,
there is run-time exception with the following message:
list iterator not decrement-able.
HTH,
-- Saeed Amrollahi Boyouki