home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.c++.moderated      Moderated discussion of C++ superhackery      33,346 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 32,494 of 33,346   
   Seungbeom Kim to Kaba   
   Re: Why doesn't push_back return an iter   
   23 Jul 12 12:14:02   
   
   From: musiphil@bawi.org   
      
   On 2012-07-22 19:15, Kaba wrote:   
   > Hi,   
   >   
   > A small but annoying piece of STL is that the push_back and   
   > push_front member functions of std::list (say) do not return an   
   > iterator to the created element. This results in having to do   
   > something like   
   >   
   >    auto iter = list.end();   
   >    --iter;   
   >   
   > This is bad; it does not compose, it is redundant, and opens up a   
   > door for possibly getting it wrong.   
      
   Or you can write:   
      
       auto iter = std::prev(list.end());   
      
   Before C++11, it was worse because you didn't have auto. Just to   
   decrement the iterator, you had to declare a temporary variable with   
   the full type name spelled out:   
      
        std::vector::const_iterator iter = list.end();   
        --iter;   
        foo(iter);   
      
   or use a third-party library like Boost:   
      
        foo(boost::prior(list.end()));   
      
   or write a similar function yourself. Now you can just write:   
      
        foo(std::prev(list.end()));   
      
   Starting from C++03, I think you could also write:   
      
        foo(list.insert(list.end(), item));   
      
   > Why was the iterator-return left off from C++03?   
   > Why was the iterator-return left off from C++11?   
      
   Maybe it was much more important to make insert() return an iterator,   
   and after it was done, people were satisfied with what they got and   
   learned to live with it. Just a rough guess. :)   
      
   I agree that push_back(), etc. returning the iterator would be useful   
   and much more consistent with insert() doing the same.   
      
   --   
   Seungbeom Kim   
      
      
         [ See http://www.gotw.ca/resources/clcm.htm for info about ]   
         [ comp.lang.c++.moderated.    First time posters: Do this! ]   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca