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然后将其删除吗?
的std::vector的erase方法接受一个iterator说法,其中在要删除的矢量条目.它不像地图或集合那样可以调用erase以删除指定的键.
要从a中删除元素的单个副本std::vector,您可以使用std::find和std::vector的erase成员函数,如下所示:
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并且向量中有大量元素,您可能需要考虑将数据结构更改为更有效地支持删除的内容.
| 归档时间: |
|
| 查看次数: |
6363 次 |
| 最近记录: |