如何从以给定值开头的向量中移除元素

How to remove an element from a vector who starts with given value

本文关键字:向量 元素 开头      更新时间:2023-10-16

给定一个字符串向量和一个字符串,删除字符串以给定字符串开头的向量的每个元素最简单的方法是什么?

例如,假设vector<string> ToProcess已填充,并且您希望删除以"string done="123xyz"开头的每个元素?只有一场比赛。

因为你说只有一个匹配,所以使用STL实际上有点棘手。您需要使用std::find_if来定位要删除的一个值,然后用矢量中的最后一个值覆盖该值,然后再使用pop_back(),而不是使用std::remove_if。完成这一切需要额外的几行代码,但会为您提供最佳性能,否则您将无法获得最佳性能(因为remove_if在找到一行代码后不会停止,而其他一些方法会尝试从中间擦除,这需要向下移动向量的后半部分)。

要使用find_if,必须首先实现一个对字符串执行"startswitch"的谓词,如下所示:

struct StartsWith
{
  StartsWith(string prefix) : _prefix(prefix) {}
  bool operator()(const string& value) { /*...*/ }
private:
  string _prefix;
};