Can you pop_back a vector and still use the iterator to the last element?How do I erase an element from std::vector<> by index?Test if a vector contains a given elementWhat is the most effective way to get the index of an iterator of an std::vector?What is the easiest way to initialize a std::vector with hardcoded elements?std::vector iterator invalidationVector iterator comparisonusing erase with remove_ifC++ vector content not changed while using iterator

Why isn't "I've" a proper response?

what mathematical functions can we use to generate patterns for rhythm (meter and notes)?

How to prevent clipped screen edges on my TV, HDMI-connected?

The Knight's estate

What is the difference between computational complexity and time complexity?

Why do banks “park” their money at the European Central Bank?

Is for(( ... )) ... ; a valid shell syntax? In which shells?

Is it possible to perform a regression where you have an unknown / unknowable feature variable?

Why did MS-DOS applications built using Turbo Pascal fail to start with a division by zero error on faster systems?

How to find out the average duration of the peer-review process for a given journal?

Does norwegian.no airline overbook flights?

Pythagorean triple with hypotenuse a power of 2

Is gzip atomic?

Why did this happen to Thanos's ships at the end of "Avengers: Endgame"?

Avoiding racist tropes in fantasy

Nothing like a good ol' game of ModTen

“T” in subscript in formulas

What to say to a student who has failed?

Would it be possible to have a GMO that produces chocolate?

Non-visual Computers - thoughts?

Is "The life is beautiful" incorrect or just very non-idiomatic?

Can you pop_back a vector and still use the iterator to the last element?

Is there any method of inflicting the incapacitated condition and no other condition?

Why is my Earth simulation slower than the reality?



Can you pop_back a vector and still use the iterator to the last element?


How do I erase an element from std::vector<> by index?Test if a vector contains a given elementWhat is the most effective way to get the index of an iterator of an std::vector?What is the easiest way to initialize a std::vector with hardcoded elements?std::vector iterator invalidationVector iterator comparisonusing erase with remove_ifC++ vector content not changed while using iterator






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








7















I wonder what happens if I have an iterator on the last element of the vector and do pop_back.



std::set<int> s;
s.insert(5);

std::vector<int> v = 1, 2, 3, 4, 5;

for (auto it = v.begin(); it != v.end();)
if (s.count(*it))
std::swap(*it, v.back());
v.pop_back();
else
++it;




Code above works properly (v is 1, 2, 3, 4 after that block) at least with clang, but is it correct to check if it == v.end() if it is invalidated?










share|improve this question









New contributor



user3365922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.



























    7















    I wonder what happens if I have an iterator on the last element of the vector and do pop_back.



    std::set<int> s;
    s.insert(5);

    std::vector<int> v = 1, 2, 3, 4, 5;

    for (auto it = v.begin(); it != v.end();)
    if (s.count(*it))
    std::swap(*it, v.back());
    v.pop_back();
    else
    ++it;




    Code above works properly (v is 1, 2, 3, 4 after that block) at least with clang, but is it correct to check if it == v.end() if it is invalidated?










    share|improve this question









    New contributor



    user3365922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.























      7












      7








      7


      1






      I wonder what happens if I have an iterator on the last element of the vector and do pop_back.



      std::set<int> s;
      s.insert(5);

      std::vector<int> v = 1, 2, 3, 4, 5;

      for (auto it = v.begin(); it != v.end();)
      if (s.count(*it))
      std::swap(*it, v.back());
      v.pop_back();
      else
      ++it;




      Code above works properly (v is 1, 2, 3, 4 after that block) at least with clang, but is it correct to check if it == v.end() if it is invalidated?










      share|improve this question









      New contributor



      user3365922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      I wonder what happens if I have an iterator on the last element of the vector and do pop_back.



      std::set<int> s;
      s.insert(5);

      std::vector<int> v = 1, 2, 3, 4, 5;

      for (auto it = v.begin(); it != v.end();)
      if (s.count(*it))
      std::swap(*it, v.back());
      v.pop_back();
      else
      ++it;




      Code above works properly (v is 1, 2, 3, 4 after that block) at least with clang, but is it correct to check if it == v.end() if it is invalidated?







      c++ vector iterator






      share|improve this question









      New contributor



      user3365922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.










      share|improve this question









      New contributor



      user3365922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      share|improve this question




      share|improve this question








      edited 7 hours ago









      Nicol Bolas

      305k37 gold badges511 silver badges691 bronze badges




      305k37 gold badges511 silver badges691 bronze badges






      New contributor



      user3365922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      asked 8 hours ago









      user3365922user3365922

      585 bronze badges




      585 bronze badges




      New contributor



      user3365922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




      New contributor




      user3365922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.



























          1 Answer
          1






          active

          oldest

          votes


















          8















          Your instincts are good; vector::pop_back invalidates iterators and references to the last element. If it is such an iterator, then it will be invalidated, and thus cannot be compared with v.end().



          It would be much better to fix this by using algorithms and the erase-remove idiom:



          auto last_it = std::remove_if(v.begin(), v.end(), [&](const auto &val) return s.count(val) != 0;);
          v.erase(last_it, v.end());





          share|improve this answer
























            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );






            user3365922 is a new contributor. Be nice, and check out our Code of Conduct.









            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f57629086%2fcan-you-pop-back-a-vector-and-still-use-the-iterator-to-the-last-element%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            8















            Your instincts are good; vector::pop_back invalidates iterators and references to the last element. If it is such an iterator, then it will be invalidated, and thus cannot be compared with v.end().



            It would be much better to fix this by using algorithms and the erase-remove idiom:



            auto last_it = std::remove_if(v.begin(), v.end(), [&](const auto &val) return s.count(val) != 0;);
            v.erase(last_it, v.end());





            share|improve this answer





























              8















              Your instincts are good; vector::pop_back invalidates iterators and references to the last element. If it is such an iterator, then it will be invalidated, and thus cannot be compared with v.end().



              It would be much better to fix this by using algorithms and the erase-remove idiom:



              auto last_it = std::remove_if(v.begin(), v.end(), [&](const auto &val) return s.count(val) != 0;);
              v.erase(last_it, v.end());





              share|improve this answer



























                8














                8










                8









                Your instincts are good; vector::pop_back invalidates iterators and references to the last element. If it is such an iterator, then it will be invalidated, and thus cannot be compared with v.end().



                It would be much better to fix this by using algorithms and the erase-remove idiom:



                auto last_it = std::remove_if(v.begin(), v.end(), [&](const auto &val) return s.count(val) != 0;);
                v.erase(last_it, v.end());





                share|improve this answer













                Your instincts are good; vector::pop_back invalidates iterators and references to the last element. If it is such an iterator, then it will be invalidated, and thus cannot be compared with v.end().



                It would be much better to fix this by using algorithms and the erase-remove idiom:



                auto last_it = std::remove_if(v.begin(), v.end(), [&](const auto &val) return s.count(val) != 0;);
                v.erase(last_it, v.end());






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 7 hours ago









                Nicol BolasNicol Bolas

                305k37 gold badges511 silver badges691 bronze badges




                305k37 gold badges511 silver badges691 bronze badges





















                    Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.







                    Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.












                    user3365922 is a new contributor. Be nice, and check out our Code of Conduct.









                    draft saved

                    draft discarded


















                    user3365922 is a new contributor. Be nice, and check out our Code of Conduct.












                    user3365922 is a new contributor. Be nice, and check out our Code of Conduct.











                    user3365922 is a new contributor. Be nice, and check out our Code of Conduct.














                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f57629086%2fcan-you-pop-back-a-vector-and-still-use-the-iterator-to-the-last-element%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Canceling a color specificationRandomly assigning color to Graphics3D objects?Default color for Filling in Mathematica 9Coloring specific elements of sets with a prime modified order in an array plotHow to pick a color differing significantly from the colors already in a given color list?Detection of the text colorColor numbers based on their valueCan color schemes for use with ColorData include opacity specification?My dynamic color schemes

                    Invision Community Contents History See also References External links Navigation menuProprietaryinvisioncommunity.comIPS Community ForumsIPS Community Forumsthis blog entry"License Changes, IP.Board 3.4, and the Future""Interview -- Matt Mecham of Ibforums""CEO Invision Power Board, Matt Mecham Is a Liar, Thief!"IPB License Explanation 1.3, 1.3.1, 2.0, and 2.1ArchivedSecurity Fixes, Updates And Enhancements For IPB 1.3.1Archived"New Demo Accounts - Invision Power Services"the original"New Default Skin"the original"Invision Power Board 3.0.0 and Applications Released"the original"Archived copy"the original"Perpetual licenses being done away with""Release Notes - Invision Power Services""Introducing: IPS Community Suite 4!"Invision Community Release Notes

                    François Viète Contents Biography Work and thought Bibliography See also Notes Further reading External links Navigation menup. 21Google Bookspp. 75–77Google BooksDe thou (from University of Saint Andrews)ArchivedGoogle BooksGoogle BooksGoogle BooksGoogle booksGoogle Bookscc-parthenay.frL'histoire universelle (fr)Universal History (en)ArchivedAdsabs.harvard.eduPagesperso-orange.frArchive.orgChikara Sasaki. Descartes' mathematical thought p.259Google BooksGoogle BooksGoogle Bookspp. 152 and onwardGoogle BooksGoogle BooksScribd.comGoogle Books1257-7979Google BooksGoogle BooksGoogle BooksGoogle BooksGoogle BooksGoogle BooksGallica.bnf.frGoogle BooksGoogle Books"François Viète"Francois Viète: Father of Modern Algebraic NotationThe Lawyer and the GamblerAbout TarporleySite de Jean-Paul GuichardL'algèbre nouvelle"About the Harmonicon"cb120511976(data)1188044800000 0001 0913 5903n82164680ola2013766880073431702w6vt1sb70287374827140948071409480