C++primer--泛型算法初识

  • 在这里,我想说的重点是对于泛型算法,他的特点是不直接操纵容器,这是最主要的特点,这也就意味着他不会直接对容器进行操作。
    • 例如容器的增删改移,算法接受的是迭代器,对迭代以及接收到的迭代器范围元素进行算法处理,而在这个过程中,就算容器发生了元素的增删改移的事件,算法对容器也不负责,主要是迭代器的责任,这也是算法的特殊之处。
  • 前两个小节的主要算法如下:
    #include<iostream>
    #include<algorithm>
    #include<numeric>
    #include<vector>
    #include <iterator>
    using namespace std;
    void output_date(const vector<int>&s)
    {
            for (auto i = s.begin(); i != s.end();i++)
            {
                cout << *i << "  " ;
            }
            cout << endl;

    }
    int main(int argc, char **argv)
    {
        vector<int>vec{ 1, 1,1,1,1,1,1,32, 5, 6, 34, 312, 6, 21, 5, 35, 0 };
        auto result = find(vec.begin(),vec.end(),18);
        cout << ((result==vec.end())?"is not present":"i s the present") << endl;
        int al[10] = { 213, 43, 76, 324, 67, 453, 21, 76, 4, 214 };
        auto resultl = find(al + 1, al + 4, 21);
        cout << *resultl<<endl;
        auto resultnum = count(vec.begin(),vec.end(),1);//count也需要三个参数统计数值出现的次数
        auto sum = accumulate(vec.begin(), vec.end(), 0);
        auto ittsum = accumulate(al, al + 10, 0);
        cout << sum << " " << ittsum << endl;
        cout <<resultnum << endl;
        vector<string>str={ "-86", "-679", "-2341", "-4542", "-213" };
        vector<string>str1= { "-86", "-679", "-2341", "-4542", "-213" };
        string sumstring = accumulate(str.cbegin(),str.cend(),string(""));
        auto res = equal(str.begin(), str.end(), str1.begin());
        cout << res<<endl;
        vector<double>vec1{ 1, 1.3, 1, 1, 1, 1.2, 1, 32, 5, 6, 34, 312, 6, 21, 5, 35, 0 };
        vector<double>vec2{ 1, 1, 1, 1, 1, 1, 1, 32, 5, 6, 34, 312, 6, 21, 5, 35, 0 };
        auto doubres=accumulate(vec1.cbegin(), vec1.cend(), 0.0);
        cout << doubres << endl;
        vector<int >lla;
        auto it = back_inserter(lla);
        *it = 22;
        fill_n(back_inserter(lla), 10, 0);//添加10个元素到lla中;
        sort(vec.begin(), vec.end());
        output_date(vec);
        unique(vec.begin(), vec.end());
        output_date(vec);
        system("pause");
        return 0;
    }

测试结果如下:
这里写图片描述
对于结果主要有两点解释:
- 1. 对于上面的sort一次排序后倒数第二行出现有序的结果,然后在使用unique算法后出现的显示是这么的原理,因为unique的作用是去除排序后的相等重复元素,只留下一个。但是算法对容器是不会具有真正的操作权限的 ,他只是操纵迭代器对容器进行操作,在这个过程中,算法根本就不知道容器这个玩意儿,所以在去除重复元素后将其余元素按照顺序依次排列,但是这个过程中,容器的元素数量是不会发生改变的,所以后面会出现什么算法是不知道的剩下的就是,迭代器的事了。

主要代码就是这上面的了,如有错误欢迎指出

转载于:https://www.cnblogs.com/VCctor/p/5100686.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值