我有一个包含数据的向量,例如:15,27,40,50,15,40
我想对它进行排序并删除相同的值,因此排序后的输出应为:15,27,40,50
我尝试了几种方法:
std::sort(vectProjHori.begin(),vectProjHori.end());
for (std::vector<int>::iterator it=vectProjHori.begin(); it!=vectProjHori.end(); ++it)
{
if(it+1 != it)
{
std::cout << ' ' << *it;
}
}
但是,它无法在向量中删除相同的值。 我真的希望有人愿意提供一种有效的方法。
任何帮助都将受到高度赞赏。 谢谢
答案 0 :(得分:7)
您可以使用标准功能执行此操作。
std::sort(vectProjHori.begin(), vectProjHori.end());
vectProjHori.erase(std::unique(vectProjHori.begin(), vectProjHori.end()), vectProjHori.end());
答案 1 :(得分:1)
it + 1
肯定不是it
;你需要在比较之前首先取消引用。
答案 2 :(得分:0)
这将完成你的工作,但上面的mwerschy代码更好。 C ++ 11
#include <iostream>
#include <algorithm>
#include <iterator>
int main() {
std::vector<int> v={1,2,8,4,5,5};
std::sort(v.begin(),v.end());
auto it=std::unique(v.begin(),v.end());
v.resize(std::distance(v.begin(),it));
std::copy(v.begin(),v.end(),std::ostream_iterator<int>(std::cout,"\n"));
}
输出将是:
1
2
4
5
8