#include <algorithm>
#include <numeric>
#include <iterator>
#include <vector>
#include <iostream>
#include <functional>
using namespace std;
//template<typename T>
void printing(const vector<int> &vec)
{
for (auto ite : vec){
cout << ite << ends;
}
cout << endl;
}
void callbc(int a,int b){
cout << a + b << ends;
}
void generic_algorithm_test()
{
int ia[] = { 5, 7, 4, 2, 3, 9, 8, 1 };
int val = 100;
int *result=find(begin(ia), end(ia), val); //find返回指向val的指针或迭代器
cout << result << endl;
int sum = 0;
sum = accumulate(begin(ia), end(ia), 0); //求和,初值为0
cout << sum << endl;
//int ib[] = { 5, 7, 4, 2 };
//bool equal(begin(ia),end(ia), begin(ib));
fill(begin(ia), end(ia), 11); //写容器算法,
for (auto i : ia){
cout << i << ends;
}
cout << endl;
vector<int> vec(10);
fill_n(vec.begin(), 4, 13);
printing(vec);
//插入迭代器
auto ite = back_inserter(vec);
*ite = 35;
printing(vec);
//插入迭代器是一种向容器中添加元素的迭代器,确保有足够的空间来容纳输出数据的方法。
fill_n(back_inserter(vec), 7, 37);
printing(vec);
//拷贝算法
//可以使用copy()实现内置数组的拷贝
vector<int> vec3;
//vec3.resize(vec.size());
//copy(vec.begin(),vec.end(), vec3.begin());
//copy(begin(ia), end(ia), vec3.begin());
copy(begin(ia),end(ia), back_inserter(vec3));
printing(vec3);
sort(vec3.begin(), vec3.end()); //排序算法
auto end_unique=unique(vec3.begin(), vec3.end());
vec3.erase(end_unique, vec3.end());
printing(vec3);
for (int i = 10; i > 0; i--){
vec3.push_back(i);
}
sort(vec3.begin(), vec3.end());
printing(vec3);
sort(vec3.begin(), vec3.end(), [](int &a, int &b){return a > b; }); //定制操作,向算法传递函数。
printing(vec3);
cout << "for_each() test" << endl;
for_each(vec3.begin(), vec3.end(), [](int &i){cout << i << ends; }); //使用lambda表达式
cout << endl;
for_each(vec3.begin(), vec3.end(), bind(callbc, std::placeholders::_1, 3)); //使用bind函数
}
C++ 常用泛型算法的使用
最新推荐文章于 2024-08-13 13:28:29 发布