std::set_intersection
原文链接:http://www.cplusplus.com/reference/algorithm/set_intersection/
1、 函数功能:
- 用于求两个有序集合的交集元素并输出
注意:所求的集合一定是有序集合
2、 函数源码
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;
}
3、 函数参数
set_intersection(first1,last1,first2,last2,result,comp)
- first1,last1
指针(迭代器),表示第一个有序集合要求交集的范围[first1,last1)- first2,last2
指针(迭代器),表示第二个有序集合要求交集的范围[first2,last2)- result
指针(迭代器),求得的交集从此地址开始输出- comp
比较函数,不解释
4、 用法示例
// set_intersection example
#include <iostream> // std::cout
#include <algorithm> // std::set_intersection, std::sort
#include <vector> // std::vector
int main () {
int first[] = {5,10,15,20,25};
int second[] = {50,40,30,20,10};
std::vector<int> v(10); // 0 0 0 0 0 0 0 0 0 0
std::vector<int>::iterator it;
std::sort (first,first+5); // 5 10 15 20 25
std::sort (second,second+5); // 10 20 30 40 50
it=std::set_intersection (first, first+5, second, second+5, v.begin());
// 10 20 0 0 0 0 0 0 0 0
v.resize(it-v.begin()); // 10 20
std::cout << "The intersection has " << (v.size()) << " elements:\n";
for (it=v.begin(); it!=v.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
输出结果:
The intersection has 2 elements:
10 20