给定字符串和字符串的向量,删除字符串以给定字符串开头的向量的每个元素的最简单方法是什么?
例如说填充了vector<string> ToProcess
,你想要删除以`string done =“123xyz”开头的每个元素?
只会有一场比赛。
答案 0 :(得分:1)
既然你说只有一个匹配,那么使用STL实际上有点棘手。您需要使用std::remove_if
来找到要移除的一个值,而不是使用std::find_if
,而是使用向量中的最后一个值覆盖该值,然后pop_back()
。完成所有这些操作需要额外的几行代码,但会为您提供最佳性能,否则您将获得最佳性能(因为remove_if
在找到之后不会停止,而其他一些方法会尝试擦除从中间需要向下移动向量的后半部分。)
要使用find_if
,您必须首先实现一个谓词&#34; startswith&#34;对于字符串,像这样:
struct StartsWith
{
StartsWith(string prefix) : _prefix(prefix) {}
bool operator()(const string& value) { /*...*/ }
private:
string _prefix;
};