1.set_intersection( iterator beg1,iterator end1, iterator beg2,iterator end2, iterator dest);
- 两个集合必须是有序序列
- 最特殊的情况,大容器包含小容器,开辟空间取小容器的size即可
- 函数返回值是交集最后一个元素的位置
- beg1,end1,beg2,end2 容器1开始、结束,容器2开始、结束;
- dest 目标容器开始迭代器
#include<iostream> #include<vector> #include<algorithm> #include<numeric> using namespace std; class myprint { public: void operator()(int val) { cout << val << " "; } }; void test1() { vector<int> v1; vector<int> v2; for (int i = 0; i < 10; i++) { v1.push_back(i); // 0`9 v2.push_back(i + 5); // 5`14 } vector<int> vtarget; //目标容器需要提前开辟空间 //最特殊的情况,大容器包含小容器,开辟空间取小容器的size即可 vtarget.resize(min(v1.size(), v2.size())); //获取交集 vector<int>::iterator itEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vtarget.begin()); for_each(vtarget.begin(), itEnd, myprint()); //打印 5 6 7 8 9 cout << endl; for_each(vtarget.begin(), vtarget.end() , myprint()); //打印 5 6 7 8 9 0 0 0 0 0 cout << endl; } int main() { test1(); return 0; }