我有std::vector<string>
名为v
。我想从用户那里读取一个字符串并将其从v
中删除。这就是我到目前为止所拥有的:
string rnames;
cout << "Enter the string to remove " << endl;
cin >> rnames;
v.erase(rnames);
这会产生错误。
我们如何才能让它发挥作用?我们首先需要找到rnames然后将其删除吗?
答案 0 :(得分:6)
std::vector
的{{1}}方法接受一个迭代器,说明要删除的向量中的哪个条目。它不像地图或集合那样可以调用erase
来删除指定的密钥。
要从erase
删除元素的单个副本,您可以使用std::vector
和std::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());
中移除元素,并且向量中有大量元素,您可能需要考虑将数据结构更改为更有效地支持删除的内容。