Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > list::end() decrement

Reply
Thread Tools

list::end() decrement

 
 
JC
Guest
Posts: n/a
 
      07-22-2012
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 find was at http://www.sgi.com/tech/stl/BackInsertionSequence.html, which is trustworthy, but I wasn't able to find the validity explicitly stated anywhere (not that it isn't, I just couldn't find it).

Thanks!
J
 
Reply With Quote
 
 
 
 
Marc
Guest
Posts: n/a
 
      07-22-2012
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?


It may not even compile. On the other hand, the following is fine:

list<x>::iterator lastiter = alist.end();
-- lastiter;
 
Reply With Quote
 
 
 
 
Saeed Amrollahi
Guest
Posts: n/a
 
      07-22-2012
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&lt;x&gt; alist = ...; // non-empty
> list&lt;x&gt;::iterator lastiter = -- alist.end();
>
> ... always result in lastiter being a valid forward iterator for the lastelement in alist?
>
> The reason I'm asking is because the only reference I was able to find was at http://www.sgi.com/tech/stl/BackInsertionSequence.html, which is trustworthy, but I wasn't able to find the validity explicitly stated anywhere (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';

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
 
Reply With Quote
 
JC
Guest
Posts: n/a
 
      07-24-2012
On Sunday, July 22, 2012 7:07:40 AM UTC-4, Saeed Amrollahi wrote:
> On Sunday, July 22, 2012 10:24:58 AM UTC+4:30, JC wrote:
> &gt; Just to make sure, is the pre/post decrement operator valid on list::end()? In particular, assuming a non-empty, non-volatile list, will...
> &gt;
> &gt; list&amp;lt;x&amp;gt; alist = ...; // non-empty
> &gt; list&amp;lt;x&amp;gt;::iterator lastiter = -- alist.end();
> &gt;
> &gt; ... always result in lastiter being a valid forward iterator for thelast element in alist?
> &gt;
> &gt; The reason I&amp;#39;m asking is because the only reference I was able to find was at http://www.sgi.com/tech/stl/BackInsertionSequence.html, which is trustworthy, but I wasn&amp;#39;t able to find the validity explicitly stated anywhere (not that it isn&amp;#39;t, I just couldn&amp;#39;t find it).
> &gt;
> &gt; Thanks!
> &gt; 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 &lt;list&gt;
> #include &lt;iostream&gt;
>
> int main()
> {
> using namespace std;
> list&lt;int&gt; a_list = {0, 1, 2};
> list&lt;int&gt;::iterator last_iter = --a_list.end();
> cout &lt;&lt; *last_iter &lt;&lt; '\n';
>
> 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 &lt;list&gt;
> #include &lt;iostream&gt;
>
> int main()
> {
> using namespace std;
> list&lt;int&gt; a_list;
> a_list.push_back(0); a_list.push_back(1); a_list.push_back(2);
> list&lt;int&gt;::iterator last_iter = --a_list.end();
> cout &lt;&lt; *last_iter &lt;&lt; '\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



Thanks for digging into it! Yes it is hard to find solid information.

The original page I linked to at http://www.sgi.com/tech/stl/BackInsertionSequence.html says:

"a.back() | Equivalent to *(--a.end())."

But I wasn't able to determine if the note was a conceptual or formal example.

It is working in my code for now, at least, not that that means anything...

J
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
ambiguity of post-increment and post-decrement Mark Turney C++ 11 11-13-2006 04:41 PM
again some incr/decrement question rahul8143@gmail.com C Programming 1 07-02-2005 12:38 PM
map : iterator increment/decrement code John C++ 4 05-17-2005 09:51 AM
Increment, decrement, overflow, and underflow Ian Pilcher C Programming 5 01-21-2005 03:26 AM
How can I increment/decrement a multidemensional array without a loop? Hendrix C++ 1 06-29-2003 07:59 AM



Advertisments