C++中的泛型算法是比较通用的,主要包含在algorithm和numeric头文件中,可以方便地操作各种数据类型。下面是一些常见的泛型算法。
accumulate: 是一种只读算法,用于累加序列中的元素,示例如下:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4, 5};
int sum = accumulate(v.begin(), v.end(), 0);
cout << "Sum is " << sum << endl;
return 0;
}
equal: 是一种只读算法,用于判断两个序列是否相等,示例如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v1 = {1, 2, 3, 4, 5};
vector<int> v2 = {1, 2, 3, 4, 5};
if(equal(v1.begin(), v1.end(), v2.begin()))
cout << "The two vectors are equal." << endl;
else
cout << "The two vectors are not equal." << endl;
return 0;
}
fill和fill_n: 是一种修改容器的算法,用于填充容器的元素,示例如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v(5);
fill(v.begin(), v.end(), 1); // fill all elements with 1
for(int i : v)
cout << i << " ";
cout << endl;
fill_n(v.begin(), 3, 2); // fill the first 3 elements with 2
for(int i : v)
cout << i << " ";
return 0;
}
back_inserter: 是一个构造函数,返回一个用于在容器末尾插入新元素的插入迭代器。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v;
auto it = back_inserter(v); // get a back inserter for v
*it = 1; // insert elements at the end of v
*it = 2;
*it = 3;
for(int i : v)
cout << i << " ";
return 0;
}
copy: 是一个复制算法,将输入范围中的元素复制到目的序列中。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
vector<int> v1 = {1, 2, 3, 4, 5};
vector<int> v2(5);
copy(v1.begin(), v1.end(), v2.begin());
for(int i : v2)
cout << i << " ";
return 0;
}
replace和replace_copy:是一种修改算法,将匹配项替换为新值。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
vector<int> v = {1, 2, 3, 4, 5};
replace(v.begin(), v.end(), 1, 6);
for(int i : v){
cout << i << ' ';
}
return 0;
}
sort和unique:是一种排序和去重算法,先排序后去重。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
vector<int> v = {1, 5, 2, 1, 4, 3, 3, 5};
sort(v.begin(), v.end());
auto end_unique = unique(v.begin(), v.end());
v.erase(end_unique, v.end());
for(int i : v){
cout << i << ' ';
}
return 0;
}
这样就合理的理解和使用了C++泛型算法。