zoukankan      html  css  js  c++  java
  • 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的作用是去除排序后的相等重复元素,只留下一个。但是算法对容器是不会具有真正的操作权限的 ,他只是操纵迭代器对容器进行操作,在这个过程中,算法根本就不知道容器这个玩意儿,所以在去除重复元素后将其余元素按照顺序依次排列,但是这个过程中,容器的元素数量是不会发生改变的,所以后面会出现什么算法是不知道的剩下的就是,迭代器的事了。

    主要代码就是这上面的了,如有错误欢迎指出
    
  • 相关阅读:
    发现CSDN的一个小Bug,CSDN网站管理人员进来看看哈~~
    “凡客好声音”摇滚派对专场 正火热抢票中!
    帧动画
    java WEB Response重定向和缓存控制
    上一篇括号配对让人联想起catalan数,顺便转载一篇归纳的还不错的文章
    字符串循环移位
    应用层协议实现系列(三)——FTPserver之设计与实现
    HDU1575-Tr A(矩阵高速幂)
    音视频即时通讯的分包与重组
    怎样批量重命名照片,可是去掉那个烦人的括号
  • 原文地址:https://www.cnblogs.com/VCctor/p/5100686.html
Copyright © 2011-2022 走看看