C++标准库之泛型算法

本文中算法都是指泛型算法。

基本要点:

  1)算法使用迭代器进行操作。

  2)不依赖容器,但容器希望使用算法,就必须提供接口。

  3)通用算法永远不会执行容器操作。操作仅指:更改容器大小的操作。但,容器内部的算法不包括在通用中。

  4)算法使用一个 可调用对象 来对元素进行操作。可 调用对象 通常为函数。

    1,算法通常使用默认操作符 [<],[==],[>] 等。

    2,本质上就是调用一个对象作为算法的比较。

    3,通常的方式有:谓词,操作符重载,lambda表达式。

  5)算法不检查写操作:即算法写入元素值时,程序员必须保证容器已经有足够空间去保存。此错误编译器不报错。

  6)特定容器算法,可以改变容器尺寸。

谓词:

  1)包括一元谓词和二元谓词。元概念:接收参数的数量。

  2)可以用来代替算法中原有的比较规则。例如:find() 使用谓词代替默认需求操作符[ == ]。

  3)谓词可以是:表达式,函数。

  4)谓词有严格的参数数量限制。当超出时,使用lambda表达式。

lambda表达式: [capture list] (parameter list) -> return type { function body }

  1)capture list:捕获列表。

    1,可以获得 lambda表达式 所在函数的局部变量。

    2,默认为copy值。如果,使用引用捕获,必须保证lambda执行时,变量时存在的。

    3,使用mutable关键字,可以传值使用时,依然改变原变量值。

  2)返回类型必须使用 尾置返回

    1,尾置返回的一个例子:auto func(int i) -> int(*)[10] { function body }  // 返回为一个int数组。大小为10

  3)function body中包含除return外的语句时:

    1,默认返回void,如果需要返回值,请使用 尾置返回。

    2,如果只有一句 return 语句时。会根据return值,返回对应类型。

  5)表示式可以赋值给变量。

    1,不确定:作为变量,还是作为函数指针。个人倾向于指针。

    2,简单使用方式:auto f2 = [&v1] { return ++v1; }

时间: 2024-10-08 15:35:23

C++标准库之泛型算法的相关文章

【C++标准库】STL算法

使用C++标准库的算法,需包含头文件<algorithm> STL算法用于处理一个或多个iterator区间,第一个区间通常以起点和终点表示,其他区间则多数情况下只需提供起点足矣,其终点可以根据第一区间的元素数量推导出来.调用者需保证区间的有效性.STL算法命名时,引入了两种特殊的后缀: STL算法分类 非更易型算法(nomodifying algorithm) 更易型算法(modifying algorithm) 移除型算法(removing algorithm) 变序型算法(mutatin

C++标准库之迭代器

迭代器是对指针进行进一步抽象的产物. 迭代器是遍历所有容器(序列)/流的统一界面,是标准库泛形算法的基础. 迭代器根据其能力分为五种: category properties valid expressions all categories copy-constructible, copy-assignable and destructible X b(a);b = a; Can be incremented ++aa++ Random Access Bidirectional Forward

一起学习Boost标准库--Boost.StringAlgorithms库

概述 在未使用Boost库时,使用STL的std::string处理一些字符串时,总是不顺手,特别是当用了C#/Python等语言后trim/split总要封装一个方法来处理.如果没有形成自己的common代码库,那就悲剧了,每用一次都要写一次,虽然难度不大,但是每次重复这样工作也还是比较费劲.一般通过STL进行封装如下: // trim from start inline std::string &LeftTrim(string &s) { s.erase(s.begin(), std:

STL笔记(6)标准库:标准库中的排序算法

STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew Austern http://www.cuj.com/experts/1908/austern.htm?topic=experts 用泛型算法进行排序    C++标准24章有一个小节叫“Sorting and related operations”.它包含了很多对已序区间进行的操作,和三个排序用泛型

C++primer笔记:IO库、顺序容器、关联容器、面向对象、泛型算法、模板和泛型编程

第八章:IO库不直接来处理输入输出,而是通过在标准库中的一些类型来处理io istream ostream cin cout cerr getline函数 iostream:定义了用于基本读写流的基本类型 fstream: 定义了基本的读写命名文件的类型 sstream:定义了读写内存的string对象的类型 IO对象无拷贝或者赋值 条件状态:IO定义了一些函数和标志,可以帮助我们访问和操作流得条件状态 strm::iostate 条件状态的完整功能 strm::badbit 流已崩溃 strm

STL标准库-算法-常用算法

摘要: 摘要: 摘要: 技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 介绍11种STL标准库的算法,从这11种算法中总结一下算法的基本使用 1.accumulate() 累加 2.for_each() for一段区间 做你指定的行为 3.replace(), replace_if(), replace_copy() 替换函数 4.count(), count_if() 计数 5.find() 查找 6.sort() 排序 7.binary_search()查看元素是否在

利用标准库算法求解排列组合

以前求序列的排列时,最常用的方法就是递归回溯,现在发现其实像这样有特定算法的重复性工作是可以在STL标准库中找到答案的. 在STL的变序性算法中,有两个用于排列元素的算法分别如下: bool next_permutation(Iterator beg,Iterator end) bool prev_permutation(Iterator beg,Iterator end) 这两个算法的功能也很简单,next_permutation()会改变区间(beg,end)内的元素次序,使它们符合"下一个

C++学习笔记之STL标准库(二)algorithm头文件即算法

#include <algorithm> algorithm头文件中主要包含的是一大堆模板函数,即STL库提供的算法,可以认为每个函数在很大程度上是独立的.提供的算法种类有: 1)adjacent_find //检测区间内第一对相等的相邻元素 template<class FwIt> FwIt adjacent_find(FwdIt first,FwdIt last);   //如果成功,返回first+N,N满足*(first+N) == *(first+N+1):如果不存在相等

泛型算法概述

顺序容器只定义了很少的操作:在多数情况下,我们可以添加和删除元素.访问首尾元素.确定容器是否为空以及获得指向首元素或尾元素之后位置的迭代器. 如果我们想要做:查找特定元素.替换或删除一个特定值.重排元素顺序等.标准库并未给每个容器都定义成员函数来实现这些操作,而是定义了一组泛型算法:称它们为“算法”,是因为它们实现了一些经典算法的公共接口,如排序和搜索:称它们是“泛型的”,是因为它们可用于不同类型的元素和多种容器类型(不仅包括标准库类型,如vector或list,还包括内置的数组类型). 概述