【足迹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;
}

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

时间: 07-06

【足迹C++primer】30、概要(泛型算法)的相关文章

【C++ Primer | 07】泛型算法

定制操作 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 #include <algorithm> 5 #include <numeric> 6 #include <list> 7 using namespace std; 8 9 template <typename Sequence> 10 inline ostream& print

【C++ Primer | 10】泛型算法

1 find(beg, end); 2 count(beg, end); 3 reverse(beg, end); 4 fill(beg, end, val); 5 sort(beg, end); 6 stalbe_sort(beg, end); 7 min(val1, val2); 8 max(vl1, val2); 9 min_element(beg, end); 10 ma_element(beg, end); 11 accumulate(beg, emd, val); //<numeri

【足迹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.pus

【足迹C++primer】31、初识泛型算法

初识泛型算法 理解算法的最基本方法是了解他们是否读取元素.改变元素或是重排元素顺序! 只读算法 #include<iostream> #include<numeric> using namespace std; //对vec中的元素求和,初值是0 int sum=accumulate(vec.cbegin(), vec.cend(), 0); 这里面第三个参数决定了函数使用哪个加法运算符以及返回值类型. 算法和元素类型 string sum=accumulate(v.cbegin(

C++ Primer笔记6_STL之泛型算法

1.泛型算法: 大多数算法定义在头文件algorithm中,标准库还在头文件numeric中定义了一组数值泛型算法 只读算法: 举例: find函数用于找出容器中一个特定的值,有三个参数 int val = 10;//val为我们需要查找的值 auto result = find(vec.begin(), vec.end(), val): cout << "The value "<< val << (result == vec.end() ? &qu

第十一章 泛型算法 C++ PRIMER

vector<int>::const_iterator result = find(vector.begin(). vector.end(),search_value); 如果查找失败,分会end()  如果有两个,会返回哪一个的迭代器? int *reauslt = find(ia,ia+6,search_value); 也可以同样处理字符串 算法要以<algorithm><numeric>,依赖于迭代器和迭代器的算法实现,算法可能改变值,可能移动元素,单从不直接添加

C++ Primer 学习笔记_45_STL实践与分析(19)--泛型算法的结构

STL实践与分析 --泛型算法的结构 引言: 正如全部的容器都建立在一致的设计模式上一样,算法也具有共同的设计基础. 算法最主要的性质是须要使用的迭代器种类.全部算法都指定了它的每一个迭代器形參可使用的迭代器类型.比方,假设形參必须为随机訪问迭代器则可提供vector或 deque类型的迭代器,或者提供指向数组的指针.而其它容器的迭代器不能用在这类算法上. C++还提供了另外两种算法模式:一种模式由算法所带的形參定义;还有一种模式则通过两种函数命名和重载的规范定义. 一.算法的形參模式 大多数的

【足迹C++primer】35、特定容器算法

特定容器算法 lst.merge(lst2) 将来自lst2的元素并入到lst.这两个都必须是有序的. lst.merge(lst2, comp) 元素将从lst2删除,第一个版本使用<运算符,第二个版本使用给定的运算符 lst.remove(lst2)调用erase删除掉与给定值相等(==)或令一元谓词为真的每个元素 lst.remove_if(pred) lst.reverse() 反转lst中元素的顺序 lst.sort() 使用<或给定比较操作排序元素 lst.sort(comp) l

C++ Primer 读书笔记:第11章 泛型算法

第11章 泛型算法 1.概述 泛型算法依赖于迭代器,而不是依赖容器,需要指定作用的区间,即[开始,结束),表示的区间,如上所示 此外还需要元素是可比的,如果元素本身是不可比的,那么可以自己定义比较函数. 2.常用的泛型算法函数: fill,fill_n, copy, replace, sort, unique, count_if, stable_sort 此外在有一个谓词函数会结合以上的函数使用,像sort, count_if等 3.再谈迭代器 (1)插入迭代器 back_inserter, f