从std :: vector中删除字符串?

时间:2016-11-06 19:18:15

标签: c++ string vector

我有std::vector<string>名为v。我想从用户那里读取一个字符串并将其从v中删除。这就是我到目前为止所拥有的:

string rnames;
cout << "Enter the string to remove " << endl;
cin >> rnames;

v.erase(rnames);

这会产生错误。

我们如何才能让它发挥作用?我们首先需要找到rnames然后将其删除吗?

1 个答案:

答案 0 :(得分:6)

std::vector的{​​{1}}方法接受一个迭代器,说明要删除的向量中的哪个条目。它不像地图或集合那样可以调用erase来删除指定的密钥。

要从erase删除元素的单个副本,您可以使用std::vectorstd::find的{​​{1}}成员函数,如下所示:

std::vector

上面的代码假设您正在使用C ++ 11,所有主要的现代编译器都支持它。但是,您似乎使用的是不支持C ++ 11的旧编译器,因此您必须编写如下内容:

erase

要从auto itr = std::find(v.begin(), v.end(), rnames); if (itr != v.end()) v.erase(itr); 删除元素的所有副本,您可以像这样使用std::vector<string>::iterator itr = std::find(v.begin(), v.end(), rnames); if (itr != v.end()) v.erase(itr);

vector

(这需要std::remove标题。)话虽如此,如果您发现自己经常从v.erase(std::remove(v.begin(), v.end(), rnames), v.end()); 中移除元素,并且向量中有大量元素,您可能需要考虑将数据结构更改为更有效地支持删除的内容。