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


#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函数
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值