本文主要是介绍Linux C++ 041-STL之集合算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Linux C++ 041-STL之集合算法
本节关键字:Linux、C++、集合算法
相关库函数:set_intersection、set_union、set_difference
set_intersection()
功能描述:求两个容器的交集
函数原型:
set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
// dest - 目标容器的起始迭代器
示例:
#include <numeric>
#include <algorithm>class MyPrint
{
public:void operator()(const int val){cout << val << " ";}
};void test01()
{vector<int> v1;vector<int> v2;for(int i=0;i<5;i++){v1.push_back(i);v2.push_back(i+2);}vectot<int> vTarget;//开辟空间,特殊情况,取小容器的sizevTarget.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());cout << endl;
}
总结:
1.求交集的两个集合必须是有序序列
2.目标容器记得提前开辟空间,取小容器的大小
3.set_intersection返回值为交集中最后一个元素的位置
set_union()
功能描述:求两个容器的并集
函数原型:
set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
// dest - 目标容器的起始迭代器
示例:
#include <numeric>
#include <algorithm>class MyPrint
{
public:void operator()(const int val){cout << val << " ";}
};void test01()
{vector<int> v1;vector<int> v2;for(int i=0;i<5;i++){v1.push_back(i);v2.push_back(i+4);}vectot<int> vTarget;//开辟空间,特殊情况,取小容器的sizevTarget.resize(v1.size() + v2.size());vector<int>::iterator itEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, MyPrint());cout << endl;
}
总结:
1.求并集的两个集合必须是有序序列
2.目标容器记得提前开辟空间,取两个容器大小的和
3.set_union返回值为并集中最后一个元素的位置
set_difference()
功能描述:求两个容器的差集
函数原型:
set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
// dest - 目标容器的起始迭代器
示例:
#include <numeric>
#include <algorithm>class MyPrint
{
public:void operator()(const int val){cout << val << " ";}
};void test01()
{vector<int> v1;vector<int> v2;for(int i=0;i<5;i++){v1.push_back(i);v2.push_back(i+2);}vectot<int> vTarget;//开辟空间,特殊情况,取小容器的sizevTarget.resize( max(v1.size(), v2.size()) );vector<int>::iterator itEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, MyPrint());cout << endl;itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, MyPrint());cout << endl;
}
总结:
1.求差集的两个集合必须是有序序列
2.目标容器记得提前开辟空间,取大容器的大小
3.set_difference返回值为差集中最后一个元素的位置
这篇关于Linux C++ 041-STL之集合算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!