C++ 常用泛型算法的使用


#include 
#include 

#include 

#include 
#include 
#include 
using namespace std;

//template
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++)