文章目錄
- 0 常用拷貝算法【copy】和替換算法【replace、replace_if、swap】簡介
- 1 copy【拷貝容器元素至另一容器】
- 2 replace【将指定值全部替換為新值】
- 3 replace_if【将滿足指定條件的元素全部替換為新元素】
- 4 swap【互換兩個同類型容器的元素】
0 常用拷貝算法【copy】和替換算法【replace、replace_if、swap】簡介
算法簡介:
copy
:拷貝容器元素至另一容器。
replace
:将容器内的指定值全部替換為新值。
replace_if
:按條件将容器内指定範圍的舊元素替換為新元素。
swap
:互換兩個相同類型容器的元素。
1 copy【拷貝容器元素至另一容器】
作用:拷貝容器元素至另一容器。
注1:使用算法時,需包含頭檔案
copy
include <algorithm>
。
注2:使用
算法時,需為目标容器提前開辟記憶體空間,如
copy
,否則程式運作時崩潰。
dest.resize(src.size());
函數原型:
copy(iterator begin, iterator end, iterator dest);
參數解釋:
begin
:源容器疊代器的起始位置;
end
:源容器疊代器的結束位置;
dest
:目标容器疊代器的起始位置。
注:實際開發時, copy
算法應用較少,建議使用容器的指派操作。
示例:
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm> //使用copy算法
int main() {
vector<int> src;
for (int i = 0; i < 5; i++) {
src.push_back(i);
}
for_each(src.begin(), src.end(), [](int val) {cout << val << " "; }); //0 1 2 3 4
//copy算法拷貝元素時,需為目标容器提前開辟記憶體空間
vector<int> dest;
dest.resize(src.size());
//copy
copy(src.begin(), src.end(), dest.begin());
for_each(dest.begin(), dest.end(), [](int val) {cout << val << " "; }); //0 1 2 3 4
return 0;
}
2 replace【将指定值全部替換為新值】
作用:将容器内的指定值的元素全部替換為新值。
注:使用算法時,需包含頭檔案
replace
。
include <algorithm>
函數原型:
replace(iterator begin, iterator end, oldvalue, newvalue);
參數解釋:
begin
:疊代器起始位置;
end
:疊代器結束位置;
oldvalue
:被替換的舊元素;
oldvalue
:替換的新元素。
示例:
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm> //使用replace算法
int main() {
vector<int> v;
v.push_back(9);
v.push_back(7);
v.push_back(1);
v.push_back(7);
v.push_back(6);
v.push_back(7);
v.push_back(3);
for_each(v.begin(), v.end(), [](int val) {cout << val << " "; }); //9 7 1 7 6 7 3
//replace():将容器内的指定值全部替換為新值
replace(v.begin(), v.end(), 7, 0);
for_each(v.begin(), v.end(), [](int val) {cout << val << " "; }); //9 0 1 0 6 0 3
return 0;
}
3 replace_if【将滿足指定條件的元素全部替換為新元素】
作用:将容器内滿足指定條件的元素全部替換為新元素。
注:使用算法時,需包含頭檔案
replace_if
。
include <algorithm>
函數原型:
replace_if(iterator begin, iterator end, _pred, newvalue);
參數解釋:
begin
:疊代器起始位置;
end
:疊代器結束位置;
_pred
:指定條件。
①普通回調函數;
②謂詞(傳回類型為
bool
的仿函數);
③匿名函數(lambda表達式)。
newvalue
:替換的新元素。
示例:
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm> //使用replace_if算法
//回調函數
bool lessThanFive(int val) {
return val < 5;
}
//謂詞(傳回類型為bool的仿函數/函數對象)
class LessThanFive {
public:
bool operator()(int val) {
return val < 5;
}
};
//将小于5的元素全部替換為100
int main() {
vector<int> v;
v.push_back(9);
v.push_back(1);
v.push_back(7);
v.push_back(6);
v.push_back(3);
for_each(v.begin(), v.end(), [](int val) {cout << val << " "; }); //9 1 7 6 3
//回調函數
//replace_if(v.begin(), v.end(), lessThanFive, 100);
//for_each(v.begin(), v.end(), [](int val) {cout << val << " "; }); //9 100 7 6 100
//謂詞
//replace_if(v.begin(), v.end(), LessThanFive(), 100);
//for_each(v.begin(), v.end(), [](int val) {cout << val << " "; }); //9 100 7 6 100
//匿名函數(lambda表達式)
replace_if(v.begin(), v.end(), [](int val) {return val < 5; }, 100);
for_each(v.begin(), v.end(), [](int val) {cout << val << " "; }); //9 100 7 6 100
return 0;
}
4 swap【互換兩個同類型容器的元素】
作用:互換兩個相同類型容器的元素。
注:使用算法時,需包含頭檔案
swap
。
include <algorithm>
函數原型:
swap(container c1, container c2);
參數解釋:
c1
:容器1;
c2
:容器2。
示例:
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm> //使用swap算法
int main() {
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 5; i++) {
v1.push_back(i);
v2.push_back(-i);
}
cout << "交換前..." << endl;
for_each(v1.begin(), v1.end(), [](int val) {cout << val << " "; }); //0 1 2 3 4
cout << endl;
for_each(v2.begin(), v2.end(), [](int val) {cout << val << " "; }); //0 -1 -2 -3 -4
cout << endl;
//交換
swap(v1, v2);
cout << "交換後..." << endl;
for_each(v1.begin(), v1.end(), [](int val) {cout << val << " "; }); //0 -1 -2 -3 -4
cout << endl;
for_each(v2.begin(), v2.end(), [](int val) {cout << val << " "; }); //0 1 2 3 4
cout << endl;
return 0;
}