C++ 如何对向量进行排序并删除其中的相同值?
我有一个包含如下数据的向量:15,27,40,50,15,40 我想对它进行排序并删除相同的值,因此排序后的输出应该是:15,27,40,50 我尝试过几种方法,例如:C++ 如何对向量进行排序并删除其中的相同值?,c++,algorithm,vector,C++,Algorithm,Vector,我有一个包含如下数据的向量: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::sort(vectProjHori.begin(),vectProjHori.end());
for (std::vector<int>::iterator it=vectProjHori.begin(); it!=vectProjHori.end(); ++it)
{
if(it+1 != it)
{
std::cout << ' ' << *it;
}
}
但是,它不能删除向量中的相同值。
我真的希望有人能给出一个有效的方法
任何帮助都将不胜感激。
谢谢你它+1肯定不是它;您需要在比较之前先解除引用。it+1肯定不是它;您需要先解除引用,然后再进行比较。您可以使用标准函数进行解除引用
std::sort(vectProjHori.begin(), vectProjHori.end());
vectProjHori.erase(std::unique(vectProjHori.begin(), vectProjHori.end()), vectProjHori.end());
您可以使用标准函数来实现这一点
std::sort(vectProjHori.begin(), vectProjHori.end());
vectProjHori.erase(std::unique(vectProjHori.begin(), vectProjHori.end()), vectProjHori.end());
这将完成您的工作,但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"));
}
这将完成您的工作,但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"));
}
你可以用resize来做,虽然使用erase似乎是更明显的选择,但是,不是那些参数。你可以用resize来做,虽然使用erase似乎是更明显的选择,但是不是那些参数。愚蠢的我,我的错。。我不太清楚。。但是我很沮丧,我不知道其他方法怎么做。愚蠢的我,我的错。。我不太清楚。。但是我很沮丧,我不知道其他的方法。谢谢@mwerschy,这是迄今为止最简单的方法。谢谢@mwerschy,这是迄今为止最简单的方法。