• 【足迹C++primer】30、概要(泛型算法)


    概要(泛型算法)

    大多数算法的头文件中定义algorithm在。

    标准库也是第一个文件numeric它定义了一套通用算法。

    #include<iostream>
    #include<numeric>
    #include<vector>
    #include<algorithm>
    
    using namespace std;
    
    int main()
    {
        vector<int> vec;
        for(size_t t=0 ; t != 44 ; ++t)
        {
            vec.push_back(t);
        }
    
        int val=42;     //我们将查找的值
        //假设在vec中找到想要的元素,则返回结果指向它,否则返回结果为vec.cend()
        auto result=find(vec.cbegin(), vec.cend(), val);
        //报告结果
        cout<<"The value "<<val
            <<(result==vec.cend()?

    " is not present":" is present")<<endl; return 0; }


    调用find方法,在vec.cbegin()和vec.cend()之间查找val找到了result指向那个元素。result是迭代器,没找到就返回第二个參数。就是cend().

    string val="a value";   //我们要查找的值
        //此调用在list中查找string元素
        auto result=find(lst.cbegin(), lst.cend(), val);


    等等,还有好多类型,不只就这一种。


    算法怎样工作

    find工作原理
    1、訪问序列中的首元素
    2、比較此元素与我们要查找的值
    3、假设此元素与我们要查找的匹配,find返回标识此元素的值
    4、否则。find前进到下一个元素,反复运行步骤2和3
    5、假设到达序列尾,find应停止
    6、假设find到达序列末尾,它应该返回一个指出元素未找到的值。

    此值和步骤3返回的值必须具有相容的类型。


    迭代器让算法不依赖于容器,但算法依赖于元素类型

    习题:
    /**
    * 功能:泛型概述
    * 时间:2014年6月16日08:10:18
    * 作者:cutter_point
    */
    
    #include<iostream>
    #include<numeric>
    #include<vector>
    #include<algorithm>
    #include<string>
    
    using namespace std;
    
    int main()
    {
    
        vector<int> vec={22,22,22,2,222,2,22,22,222,22,2,2,22,22};
        int val=22;
    
        auto result=count(vec.cbegin(), vec.cend(), val);
    
        cout<<"要找的值是:"<<val<<endl
            <<"出现了 "<<result<<" 次"<<endl;
    
    /*
        string val="a value";   //我们要查找的值
        //此调用在list中查找string元素
        auto result=find(lst.cbegin(), lst.cend(), val);
    
    
    
        vector<int> vec;
        for(size_t t=0 ; t != 44 ; ++t)
        {
            vec.push_back(t);
        }
    
        int val=42;     //我们将查找的值
        //假设在vec中找到想要的元素,则返回结果指向它,否则返回结果为vec.cend()
        auto result=find(vec.cbegin(), vec.cend(), val);
        //报告结果
        cout<<"The value "<<val
            <<(result==vec.cend()?" is not present":" is present")<<endl;
    */
        return 0;
    }
    
















    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    MyEclipse控制台输出tomcat红字
    struts标签bean:define
    字节流转换为对象的方法
    C#将jpg格式图片合成到bmp格式图片中
    [置顶]C#中Socket服务端代码分享
    [置顶] C#中Socket服务端代码分享
    [置顶] 使用Joson的格式字符串在Socket中通讯时数据格式的转换
    [置顶] AMF序列化为对象和AMF序列化为二进制字节流
    用C#获取CPU编号、硬盘编号等系统有关环境、属性
    别把紧张情绪带回家 下班后的10个最佳放松法
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4631428.html
Copyright © 2020-2023  润新知