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
















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

  • 相关阅读:
    git 常用命令
    centos 7 mini 安装
    python打印杨辉三角
    python 求100内的素数/质数
    字符串与bytes
    format
    Python字符串格式化
    数据结构
    ARM工作模式
    C语言实现字符串逆序输出
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4631428.html
Copyright © 2011-2022 走看看