Matlab有个setdiff函数用来把两个矩阵求差集,很好很强大。
工作需要,要把这功能用C++来实现,试验半天有如下结果,不对的地方请指正(目前仅考虑1*N的矩阵,也就是一个数组)。
1、C++ STL库里有set_difference函数用来求差集。但需要对数组元素先进行排序再进行去重,然后才调用此函数。
2、list容器的sort和unique速度相当的慢(见我另一篇文章),具体为什么我也不知道,反正是不能用。
3、所以,先对普通的数组对象(如int a[])进行sort和unique。
4、普通对象的unique并不真正把相同元素删除,而是按顺序排在最后一个不同元素的后面,比如{1,2,2,3,3,4,4}unique后是{1,2,3,4,2,3,4},数组大小不变。而不是list对象unique后变为{1,2,3,4}。所以,要利用普通对象unique返回的值来声明list对象。可以看下面的例子。
5、以例子说明:
int a[250000];
for(int i=0;i<250000;i++)