10.1-10.2泛型算法

//10 初识泛型算法
void genericAlgorithm()
{
    //在输入序列中查找特定元素0,如果找到该元素则返回指向它的迭代器(如果有多个则指向第一个),否则返回iVec.end()
    auto iter = find(iVec.begin(), iVec.end(), 0)

    //查找特定值个数的算法,在输入序列中查找特定值 num 的个数,可以是string
    int counts = count(iVec.begin(), iVec.end(), num);
    //查找特定值个数的算法
    int i = count_if(iVec.begin(), iVec.end(), [](int num) {return num < 0; });

    //输入序列求和,第三个参数 0 为初始值
    int sum = accumulate(iVec.begin(), iVec.end(), 0);

    //equal 比较两个序列
    equal(iVec1.begin(), iVec1.end(), iVec2.begin());

    //序列赋值,序列值全部赋值为0
    fill(iVec.begin(), iVec.end(), 0);

    //序列赋值,序列前5个元素赋值为0,确保能容纳下5个元素是程序员的责任
    fill_n(iVec.begin(), 5, 0);

    //插入迭代器
    vector<int> iVec;
    auto iter = back_inserter(iVec);    //形参为vec的引用,返回值为与容器绑定的插入迭代器
    iter = 2;    //赋值时会调用push_back

    //copy算法,将输入序列的值拷贝至输出序列,返回值为目的位置(_OutIt _Dest)迭代器的值
    auto iter = copy(_InIt _First, _InIt _Last, _OutIt _Dest);

    //替换算法,将输入序列中的0全部替换为2,改变了输入序列
    replace(iVec.begin(), iVec.end(), 0, 2);

    //copy一份输入序列,且将其中的0全部替换为2,
    replace_copy(iVec.begin(), iVec.end(),back_inserter(iVec1) 0, 2);

    //接受“可调用对象”的替换算法,将iVec中的负数全部转换为正数
    transform(iVec.begin(), iVec.end(), iVec.begin(), [](int num) {return num < 0 ? -num : num; });

    //序列重新排序(升序,可以指定一个二元谓词使其降序)
    sort(iVec.begin(), iVec.end());
    //序列重新排序(稳定版)
    stable_sort(iVec.begin(), iVec.end());

    //消除相邻的重复项,返回最后一个不重复元素的迭代器
    auto end_unique = unique(iVec.begin(), iVec.end());

    //序列分区算法,将字符数大于5的放前面,用到谓词见下章
    bool compare5(string str)
    {
        return str.length() > 5;
    }
    //序列分区算法
    partition(vecStr.begin(), vecStr.end(), compare5);

    //第三个参数是一元谓词,返回指向 第一个使谓词返回非0的元素的迭代器,否则返回尾迭代器
    find_if(iVec.begin(), iVec.end(), /*一元谓词*/)

    //对输入序列中的每个元素调用 “可调用对象”
    for_each(iVec.begin(), iVec.end(), /*可调用对象*/);
}

原文地址:https://www.cnblogs.com/liyubo/p/7868699.html

时间: 2024-10-29 04:34:41

10.1-10.2泛型算法的相关文章

C++ Primer学习总结 第10章 泛型算法

第10章 泛型算法 1.    find()泛型算法使用示例: 2.    只读算法accumulate:对所给范围的元素求和并返回. 注意accumulate的第3个参数决定着它的返回类型. 即如果第3个参数是double,就算迭代器里都是int,最终还是返回double类型的数. 3.    只读算法equal:比较前两个迭代器表示范围的所有元素是否与第3个迭代器表示的对应位置的元素都相同,如果相同返回true.两个容器类型可以不同,保存的元素类型也可以不同,只要元素之间可以比较即可.如st

《C++primer》v5 第10章 泛型算法 读书笔记 习题答案

10.1 using namespace std; int main() { vector<int> vec; int a; cin>>a; int v; while(cin>>v) vec.push_back(v); cout<<a<<" : "<<count(vec.begin(),vec.end(),a)<<endl; return 0; } 10.2 using namespace std; i

CH10 泛型算法

概述 大多数算法都定义在algorithm头文件中. Note:算法永远不会执行容器操作 泛型算法本身不会执行容器的操作,而是通过迭代器来访问.修改等操作 10.1 题目要求读取数据存入vector,并实现用户可以查找的值出现在vector中的次数,所以可以考虑用户查找文件中某个数出现的次数,所以可以考虑文件操作 1 int main(int argc, char* argv[]) 2 { 3 ifstream infile(argv[1]); 4 if (!infile) 5 cerr <<

C++ 泛型算法

<C++ Primer 4th>读书笔记 标准容器(the standard container)定义了很少的操作.标准库并没有为每种容器类型都定义实现这些操作的成员函数,而是定义了一组泛型算法:因为它们实现共同的操作,所以称之为“算法”:而“泛型”指的是它们可以操作在多种容器类型上——不但可作用于 vector 或 list 这些标准库类型,还可用在内置数组类型.甚至其他类型的序列上. 标准算法固有地独立于类型,与容器的类型无关:在前面的描述中,没有任何内容依赖于容器类型.这种算法只在一点上

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

标准库容器定义的操作非常少.标准库没有给容器添加大量的功能函数,而是选择提供一组算法,这些算法大都不依赖特定的容器类型,是“泛型”的,可作用在不同类型的容器和不同类型的元素上. 因为它们实现共同的操作,所以称之为“算法”:而“泛型”指的是它们可以操作在多种容器类型上——不但可作用于 vector 或 list 这些标准库类型,还可用在内置数组类型.甚至其他类型的序列上. 11.1. 概述 假设有一个 int 的 vector 对象,名为 vec,我们想知道其中包含某个特定值.解决这个问题最简单的

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】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.

【STL】帮你复习STL泛型算法 一

STL泛型算法 #include <iostream> #include <vector> #include <algorithm> #include <iterator> #include <numeric> #include <list> using std::cout; using std::endl; using std::vector; using std::list; bool IsOushu(const int&

【足迹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(