set_difference原型:
std::set_difference
default (1)
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
|
custom (2)
template <class InputIterator1, class InputIterator2,
class OutputIterator, class Compare>
OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result, Compare comp);
|
该函数是获得两个集合的差集。
序列应该已经有序!
返回值为result中最后一个被覆盖元素下一位置的迭代器。
其行为类似于:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result)
{
while (first1!=last1 && first2!=last2)
{
if (*first1<*first2) { *result = *first1; ++result; ++first1; }
else if (*first2<*first1) ++first2;
else { ++first1; ++first2; }
}
return std::copy(first1,last1,result);
}
一个简单的例子:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void setdifference()
{
vector<int> vi{1,2,3,4,4,6,9,22,11};
vector<int> v2{1,2,3,5,4,9,8};
vector<int> vresult(6);
sort(vi.begin(),vi.end());
sort(v2.begin(),v2.end());
cout<<"vi=";
for(int i:vi)
cout<<i<<" ";
cout<<endl;
cout<<"v2=";
for(int i:v2)
cout<<i<<" ";
cout<<endl;
set_difference(vi.begin(),vi.end(),v2.begin(),v2.end(),vresult.begin());
cout<<"vreult=";
for(int i:vresult)
cout<<i<<" ";
cout<<endl;
}
运行截图:
set_intersection原型:
std::set_intersection
default (1)
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
|
custom (2)
template <class InputIterator1, class InputIterator2,
class OutputIterator, class Compare>
OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result, Compare comp);
|
该函数是求两个集合的交集。
同样的序列应该已经有序。
行为类似于:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result)
{
while (first1!=last1 && first2!=last2)
{
if (*first1<*first2) ++first1;
else if (*first2<*first1) ++first2;
else {
*result = *first1;
++result; ++first1; ++first2;
}
}
return result;
}
一个简单的例子:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void setintersection()
{
vector<int> vi{1,2,3,4,4,6,9,22,11};
vector<int> v2{1,2,3,5,4,9,8};
vector<int> vresult(6);
sort(vi.begin(),vi.end());
sort(v2.begin(),v2.end());
cout<<"vi=";
for(int i:vi)
cout<<i<<" ";
cout<<endl;
cout<<"v2=";
for(int i:v2)
cout<<i<<" ";
cout<<endl;
set_intersection(vi.begin(),vi.end(),v2.begin(),v2.end(),vresult.begin());
cout<<"vreult=";
for(int i:vresult)
cout<<i<<" ";
cout<<endl;
}
运行截图:
其中0是本来就有没有被覆盖的。更好的做法是使用for,然后利用set_intersection的返回值作为界限遍历。
——————————————————————————————————————————————————————————————————
//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。
转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双
Email:coderguang@gmail.com
2014-9-26
于GDUT
——————————————————————————————————————————————————
分享到:
相关推荐
主要介绍了c++ STL set_difference set_intersection set_union 操作,需要的朋友可以参考下
algorithm algorithm STL 算法 algorithm_头文件_说明 algorithm algorithm STL 算法 algorithm_头文件_说明 algorithm algorithm STL 算法 algorithm_头文件_说明
用于三维光学形貌扫描完成后,生成的stl文件的读取,并形成俯视投影云图
自己编写了STL库的set,供大家学习讨论
c++ STL source code, hash and vector etc
stlshow_stl分层_STL分层_stlmatlab_STL切片_stl分层.zip
C++读取STL文件,输出所有三角形的顶点坐标
STL课件_C++_课件stl_c++课件_源码.zip
stlshow_stl分层_STL分层_stlmatlab_STL切片_stl分层_源码.rar.rar
C++中标准模板库中set容器的基本概念与基本操作
STL算法(for_each/transform)
09_07_IO_STL标准模板09_07_IO_STL标准模板09_07_IO_STL标准模板09_07_IO_STL标准模板09_07_IO_STL标准模板09_07_IO_STL标准模板09_07_IO_STL标准模板09_07_IO_STL标准模板09_07_IO_STL标准模板09_07_IO_STL标准模板...
stl的入门ppt 很好用哦,分为导入 STL的概念与组成 Iterator(迭代器) Container(容器) Algorithm(算法) Adaptors(配接器)
STL学习教程,
STL 最新源代码
vc显示stl,读取顶点坐标,并显示在独立窗口中
C++ STL 参考手册Cpp_STL_ReferenceManual ,对学习STL 有帮助
SGI STL是由SGI公司开发的STL库.这份STL可以用在VC上.
#include <algorithm> using namespace std; struct _AREA_VECTOR_STRUCT { int nAreaType;//区域类型 int nAreaID;//区域ID }; void CtestDlg::OnBnClickedButton2() { vector<_AREA_VECTOR_STRUCT> ...