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;
    }
    
















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

  • 相关阅读:
    访问 http://localhost:8081对 flink 集群和任务进行监控管理
    Flink之流处理WordCount
    Flink之批处理WordCount
    为什么说JAVA中runnable接口的run方法运行在子线程?
    Java中的字符输入输出流练习
    在JAVA中实现文件读写练习
    JAVA自定义异常使用方法
    三种二叉树遍历的非递归算法
    C编译错误:Main.c:4:5: error: variably modified ‘f’ at file scope int f[maxn];
    中序+先序构造二叉树,后序遍历
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4631428.html
Copyright © 2011-2022 走看看