使用泛型算法,mark一下
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
std::vector<int> firstVec = {1,3,7,3,8,10,34};
std::vector<int> secondVec = {3,8,54,10,37};
std::ostream_iterator<int> out_iter(std::cout, " ");
merge(firstVec.cbegin(), firstVec.cend(), secondVec.cbegin(), secondVec.cend(), out_iter);
std::cout << std::endl;
set_union(firstVec.cbegin(), firstVec.cend(), secondVec.cbegin(), secondVec.cend(), out_iter);
std::cout << std::endl;
set_difference(firstVec.cbegin(), firstVec.cend(), secondVec.cbegin(), secondVec.cend(), out_iter);
std::cout << std::endl;
set_intersection(firstVec.cbegin(), firstVec.cend(), secondVec.cbegin(), secondVec.cend(), out_iter);
return 0;
}
上结果
结论:
merge操作合并所有数据,包括两个容器中相同部分;
set_union合并所有数据,但两个容器相同部分保留一个。但容器本身相同值不影响
set_difference计算差集,但不是两个容器的差集,而是第一个容器排除两个容器相同部分,剩余的值
set_intersection计算并集,即两个容器相同的部分