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

    主要代码就是这上面的了,如有错误欢迎指出
    
  • 相关阅读:
    搭建vue环境
    git常用命令整理
    highcharts 当Y轴全部没有数据的时候 数据标签显示最下面 而不是居中显示
    highcharts 不显示X轴 Y轴 刻度
    关于placeholder中 文字添加换行 用转义字符&#13;&#10;代替<br>
    highcharts 柱状图 折线图 混合 双纵轴显示
    单行、多行文字溢出 显示省略号
    Highcharts 饼图 文字颜色设置
    多行文本,垂直居中显示,文字超出高度显示省略号
    学习方法-5:比较学习法
  • 原文地址:https://www.cnblogs.com/VCctor/p/5100686.html
Copyright © 2011-2022 走看看