按值从向量中删除一个元素 \- C

新手上路,请多包涵

如果我有

vector<T> list

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

原文由 JimR 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 768
2 个回答

您可以 对 std::vector 使用 Erase-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


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

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

原文由 Kiril Kirov 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果出现是唯一的,那么您应该使用 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

现场演示

原文由 Lightness Races in Orbit 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题