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

时间:2011-10-03 07:10:56

标签: c++ vector

如果我有

vector<T> list

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

3 个答案:

答案 0 :(得分:18)

您可以使用Erase-remove idiom for std::vector

引用:

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

或者,如果您确定它是唯一的,只需迭代向量并擦除找到的元素。类似的东西:

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

答案 1 :(得分:2)

如果事件是唯一的,那么您应该使用std::set<T>,而不是std::vector<T>

这具有erase成员函数的额外好处,可以满足您的需求。

了解如何使用正确的容器为您提供更具表现力的工具?

#include <set>
#include <iostream>

int main()
{
   std::set<int> notAList{1,2,3,4,5};

   for (auto el : notAList)
      std::cout << el << ' ';
   std::cout << '\n';

   notAList.erase(4);

   for (auto el : notAList)
      std::cout << el << ' ';
   std::cout << '\n';
}

// 1 2 3 4 5
// 1 2 3 5

Live demo

答案 2 :(得分:1)

根据Kiril的回答,您可以在代码中使用此功能:

template<typename T>
inline void remove(vector<T> & v, const T & item)
{
    v.erase(std::remove(v.begin(), v.end(), item), v.end());
}

并像这样使用

remove(myVector, anItem);