copy
①.头文件
copy 算法定义在头文件 #include 中。
②.算法作用
copy 算法作用是把指定范围的迭代器的元素拷贝到指定的区间。
③.代码示例
vector<int> vec = { 1,2,5,9,5,4,3 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
vector<int> vec2;
copy(vec.begin(), vec.begin()+5, back_inserter(vec2));
cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });
copy_if
①.头文件
copy_if 算法定义在头文件 #include 中。
②.算法作用
copy_if 算法作用是在指定范围的区间中按指定的规则筛选元素,并拷贝到指定的区间。
③.代码示例
vector<int> vec = { 1,2,3,4,5 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
vector<int> vec2;
copy_if(vec.begin(), vec.end(), back_inserter(vec2), [](int i) {return i > 2; });
cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });
reverse_copy
①.头文件
reverse_copy 算法定义在头文件 #include 中。
②.算法作用
reverse_copy 算法作用是把指定范围的迭代器的元素以相反的顺序拷贝到指定的区间。
③.代码示例
vector<int> vec = { 1,2,3,4,5 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
vector<int> vec2;
reverse_copy(vec.begin(), vec.begin() + 5, back_inserter(vec2));
cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });
copy_backward
①.头文件
copy_backward 算法定义在头文件 #include 中。
②.算法作用
copy_backward 算法需要指定目的区间的末尾迭代器,序列以倒序的方式拷贝指定区间的末尾。
③.代码示例
vector<int> vec = { 1,2,3,4,5 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
vector<int> vec2(10,0);
copy_backward(vec.begin(), vec.end(), vec2.end());
cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });
transform
①.头文件
transform 算法定义在头文件 #include 中。
②.算法作用
transform 算法作用是把指定范围的迭代器的元素用指定的函数处理后把结果拷贝到指定的区间。
③.代码示例
vector<int> vec = { 1,2,5,9,5,4,3 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
vector<int> vec2;
transform(vec.begin(), vec.end(), back_inserter(vec2), [](int i) { return i + 10; });
cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });
replace
①.头文件
replace 算法定义在头文件 #include 中。
②.算法作用
replace 算法作用是把指定范围中指定的旧元素替换成新元素。
③.代码示例
vector<int> vec = { 1,2,5,9,5,4,3 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
replace(vec.begin(), vec.end(), 5, 9);
cout << endl << "新序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
replace_if
①.头文件
replace_if 算法定义在头文件 #include 中。
②.算法作用
replace_if 算法是 replace 的升级版,可以传入一个一元谓词,作用是在指定范围中按指定的条件筛选旧元素替换成新元素。
③.代码示例
vector<int> vec = { 1,2,5,9,5,4,3 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
replace_if(vec.begin(), vec.end(), [](int i) {return i < 4; }, 0);
cout << endl << "新序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
replace_copy
①.头文件
replace_copy 算法定义在头文件 #include 中。
②.算法作用
replace_copy 算法作用是把指定范围中指定的旧元素替换成新元素,但是不改变原序列,而是把替换后的结果拷贝到一个新序列。
③.代码示例
vector<int> vec = { 1,2,3,4,5 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) {cout << i << " "; });
vector<int> vec2;
replace_copy(vec.begin(), vec.end(), back_inserter(vec2), 4,9 );
cout << endl << "新序列:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });
swap
①.头文件
swap 算法定义在头文件 #include 中。
②.算法作用
swap 算法的作用是交换两个对象的值,也可以是两个容器的值。
③.代码示例
vector<int> vec1 = { 1,2,3,4 };
vector<int> vec2 = { 4,5,6 };
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 << " "; });
swap(vec1, vec2);
cout << endl << "新序列 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 << " "; });
swap_ranges
①.头文件
swap_ranges 算法定义在头文件 #include 中。
②.算法作用
swap_ranges 算法的作用是对两个序列中指定范围的元素进行交换。
③.代码示例
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 << " "; });
swap_ranges(vec1.begin()+2, vec1.end(),vec2.begin()+2);
cout << endl << "新序列 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 << " "; });