【发布时间】:2020-06-07 15:23:51
【问题描述】:
我尝试使用算法库中的函数remove,通过函数vectorremove从向量中删除重复元素,但它不起作用:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
void vectorremove(vector<string> v)
{
for (vector<string>::iterator it = v.begin(); it != v.end(); ++it)
{
vector<string>::iterator end = remove(it + 1, v.end(), *it);
v.erase(end, v.end());
}
}
int main()
{
vector<string> vect;
string x;
while (cin >> x)
{
vect.push_back(x);
}
vectorremove(vect);
for (vector<string>::iterator it = vect.begin(); it != vect.end(); ++it)
{
cout << *it << endl;
}
return 0;
}
我写了这段代码来测试函数vectorremove是否有效,不幸的是vectorremove似乎对向量没有影响。我在vectorremove的定义中使用remove有什么错误吗?
【问题讨论】:
-
it被erase操作无效,而不是执行++it你应该使用erase的返回值 -
同样你将向量按值传递给vectorremove函数,所以
main中的vect保持不变 -
@M.M 能否请您详细说明如何使用
erase的返回值而不是++it? -
有什么东西阻止你打开你的C++书到那一章告诉你如何使用
erase(),自己阅读使用erase()的返回值的例子?这是每本 C++ 书籍都应该解释的基本内容,stackoverflow.com 不能替代 C++ 书籍。 -
查找“擦除删除成语”。或阅读
vector::erase的文档