zoukankan      html  css  js  c++  java
  • 【足迹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;
    }
    
















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

  • 相关阅读:
    Docker 简单部署 ElasticSearch
    Anaconda更新失败简单解决[CondaHTTPError: HTTP 000 CONNECTION FAILED for url]
    TermKit的新一代Mac终端,在Ubuntu 11.04 轻松安装TermKit
    Linux下如何测试网速
    centos7安装yum
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    yum 安装指定版本Docker
    如何在 Apache Hive 中解析 Json 数组
    unzip解压失败( cannot find zipfile directory)
    Linux 定时任务crontab_014
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4631428.html
Copyright © 2011-2022 走看看