从值中删除向量中的元素 - C++

Sam*_*Sam 14 c++ vector

如果我有

vector<T> list
Run Code Online (Sandbox Code Playgroud)

如果列表中的每个元素都是唯一的,那么删除元素的最简单方法是什么,只要我不知道它是否在列表中?我不知道元素的索引,我不在乎它是否在列表中.

Kir*_*rov 19

你可以使用ed-vectorErase-remove成语

引用:

std::vector<int> v; 
// fill it up somehow
v.erase(std::remove(v.begin(), v.end(), 99), v.end()); 
// really remove all elements with value 99
Run Code Online (Sandbox Code Playgroud)

或者,如果您确定它是唯一的,只需迭代向量并擦除找到的元素.就像是:

for( std::vector<T>::iterator iter = v.begin(); iter != v.end(); ++iter )
{
    if( *iter == VALUE )
    {
        v.erase( iter );
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你的第二个答案..我不会这样做.要扩展以删除所有出现的VALUE会导致人们在两个可能的地方绊倒:`iter`在`.erase()`之后失效,而`++ iter`会立即失败.必须写`iter = v.erase(iter);`而不是.现在,如果你这样做,一个额外的`++ iter`将在擦除之后提交,跳过元素.要解决这个问题,你应该在删除元素时始终通过`vector`迭代__backwards__.使用数字索引将解决这些问题.`for(int i = v.size() - 1; i> = 0; i--)if(v [i] == VALUE)v.erase(v.begin()+ i);` (5认同)
  • 我会注意到你可以使用find_if()而不是直接迭代. (2认同)