how to erase from vector in range-based loop?

前端 未结 3 1834
我在风中等你
我在风中等你 2021-02-05 22:30

I simply wanna erase the specified element in the range-based loop:

vector vec = { 3, 4, 5, 6, 7, 8 };
for (auto & i:vec)
{
    if (i>5)
    ve         


        
3条回答
  •  别那么骄傲
    2021-02-05 22:41

    Removing elements from a vector that you're iterating over is generally a bad idea. In your case you're most likely skipping the 7. A much better way would be using std::remove_if for it:

    vec.erase(std::remove_if(vec.begin(), vec.end(),
                              [](const int& i){ return i > 5; }),
               vec.end());
    

    std::remove shift the elements that should be removed to the end of the container and returns an iterator to the first of those elements. You only got to erase those elements up to the end then.

提交回复
热议问题