merge
①.头文件
merge 算法定义在头文件 #include 中。
②.算法作用
merge 算法是合并两个有序的序列,合并结果拷贝到一个新的序列,前提是这两个序列的排序规则一样。
③.代码示例
vector<int> vec1 = { 1,2,3,4 };
vector<int> vec2 = { 5,6,7,8 };
cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "原序列 vec2:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });
vector<int> vec3;
merge(vec1.begin(), vec1.end(),vec2.begin(),vec2.end(), back_inserter(vec3));
cout << endl << "新序列:" << endl;
for_each(vec3.begin(), vec3.end(), [](int i) {cout << i << " "; });
set_union
①.头文件
set_union 算法定义在头文件 #include 中。
②.算法作用
set_union 算法作用是求两个有序序列的并集,合并结果包含所有的不重复元素,并拷贝到一个新的序列,前提是这两个序列的排序规则一样。
③.代码示例
vector<int> vec1 = { 1,2,3,4,5,6 };
vector<int> vec2 = { 4,5,6,7,8,9 };
cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "原序列 vec2:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });
vector<int> vec3;
set_union(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), back_inserter(vec3));
cout << endl << "新序列:" << endl;
for_each(vec3.begin(), vec3.end(), [](int i) {cout << i << " "; });
set_intersection
①.头文件
set_intersection 算法定义在头文件 #include 中。
②.算法作用
set_intersection 算法作用是求两个有序序列的交集,合并结果是两个集合重合的元素,并拷贝到一个新的序列,前提是这两个序列的排序规则一样。
③.代码示例
vector<int> vec1 = { 1,2,3,4,5,6 };
vector<int> vec2 = { 4,5,6,7,8,9 };
cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "原序列 vec2:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });
vector<int> vec3;
set_intersection(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), back_inserter(vec3));
cout << endl << "新序列:" << endl;
for_each(vec3.begin(), vec3.end(), [](int i) {cout << i << " "; });
set_difference
①.头文件
set_difference 算法定义在头文件 #include 中。
②.算法作用
set_difference 算法作用是求两个有序序列的差集,合并结果是在第一个集合中存在而在第二个集合中不存在的元素,并拷贝到一个新的序列,前提是这两个序列的排序规则一样。
③.代码示例
vector<int> vec1 = { 1,2,3,4,5,6 };
vector<int> vec2 = { 4,5,6,7,8,9 };
cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "原序列 vec2:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });
vector<int> vec3;
set_difference(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), back_inserter(vec3));
cout << endl << "新序列:" << endl;
for_each(vec3.begin(), vec3.end(), [](int i) {cout << i << " "; });
set_symmetric_difference
①.头文件
set_symmetric_difference 算法定义在头文件 #include 中。
②.算法作用
set_symmetric_difference 算法作用是求两个有序序列的异或集,合并结果是两个序列合并后去除重合的元素,并拷贝到一个新的序列,前提是这两个序列的排序规则一样。
③.代码示例
vector<int> vec1 = { 1,2,3,4,5,6 };
vector<int> vec2 = { 4,5,6,7,8,9 };
cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "原序列 vec2:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });
vector<int> vec3;
set_symmetric_difference(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), back_inserter(vec3));
cout << endl << "新序列:" << endl;
for_each(vec3.begin(), vec3.end(), [](int i) {cout << i << " "; });
next_permutation
①.头文件
next_permutation 算法定义在头文件 #include 中。
②.算法作用
next_permutation 算法作用是获取序列的下一个按字典序排列。
③.代码示例
vector<int> vec1 = { 1,2,3 };
cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "全排列:" << endl;
do
{
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl;
} while (next_permutation(vec1.begin(), vec1.end()));
prev_permutation
①.头文件
prev_permutation 算法定义在头文件 #include 中。
②.算法作用
prev_permutation 算法作用是获取序列的上一个按字典序排列。
③.代码示例
vector<int> vec1 = { 3,2,1 };
cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "全排列:" << endl;
do
{
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl;
} while (prev_permutation(vec1.begin(), vec1.end()));