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

fsf*_*h60 -2 c++ string vector

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

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

v.erase(rnames);
Run Code Online (Sandbox Code Playgroud)

这会产生错误.

有什么想法我们如何使这个工作?我们首先需要找到rnames然后将其删除吗?

tem*_*def 7

std::vectorerase方法接受一个iterator说法,其中在要删除的矢量条目.它不像地图或集合那样可以调用erase以删除指定的键.

要从a中删除元素的单个副本std::vector,您可以使用std::findstd::vectorerase成员函数,如下所示:

auto itr = std::find(v.begin(), v.end(), rnames);
if (itr != v.end()) v.erase(itr);
Run Code Online (Sandbox Code Playgroud)

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

std::vector<string>::iterator itr = std::find(v.begin(), v.end(), rnames);
if (itr != v.end()) v.erase(itr);
Run Code Online (Sandbox Code Playgroud)

要从a中删除元素的所有副本vector,您可以std::remove像这样使用:

v.erase(std::remove(v.begin(), v.end(), rnames), v.end());
Run Code Online (Sandbox Code Playgroud)

(这需要<algorithm>标题.)话虽如此,如果您发现自己经常从a中删除元素std::vector并且向量中有大量元素,您可能需要考虑将数据结构更改为更有效地支持删除的内容.