这种说明性程序被成功编译并产生预期的结果
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> gid = { 2, 1, 5, 6, 1, 6, 2, 5 };
std::sort(gid.begin(), gid.end());
std::vector<int>::iterator itv(std::unique(gid.begin(), gid.end()));
gid.erase(itv, gid.end());
for (int x : gid) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
输出是
1 2 5 6
我可以怀疑你通过值而不是通过引用传递载体的功能。因此,您可以更改原始矢量的副本。例如
#include <iostream>
#include <vector>
#include <algorithm>
void remove_duplicates(std::vector<int> gid)
{
std::vector<int>::iterator itv(std::unique(gid.begin(), gid.end()));
gid.erase(itv, gid.end());
}
int main()
{
std::vector<int> gid = { 2, 1, 5, 6, 1, 6, 2, 5 };
std::sort(gid.begin(), gid.end());
remove_duplicates(gid);
for (int x : gid) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
输出将是
1 1 2 2 5 5 6 6
但如果你将改变参数声明类似
#include <iostream>
#include <vector>
#include <algorithm>
void remove_duplicates(std::vector<int> &gid)
{
std::vector<int>::iterator itv(std::unique(gid.begin(), gid.end()));
gid.erase(itv, gid.end());
}
int main()
{
std::vector<int> gid = { 2, 1, 5, 6, 1, 6, 2, 5 };
std::sort(gid.begin(), gid.end());
remove_duplicates(gid);
for (int x : gid) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
那么结果会像预期的
1 2 5 6
另一个原因ca如果向量是类的数据成员,而不是使用此数据成员,则在某些成员函数中使用向量的局部定义。这是初学者的一个普遍错误。
所以你需要检查你是否确实在每个操作中处理原始矢量。
按预期运行[此处](https://ideone.com/VghsbZ)。 – Jarod42 2014-11-06 14:11:11
最有可能你的代码检查后向量中的内容是错误的。 – 2014-11-06 14:12:12
除非您提供的代码能够复制您正在观察的行为,否则我们无法为您提供帮助。代码似乎是正确的。 – 2014-11-06 14:12:38