C++程序设计:原理与实践(进阶篇)16.1 标准库算法

简介:

摘要

Programming: Principles and Practice Using C++, Second Edition

算法和映射

理论上,实践是简单的。

——Trygve Reenskaug

本章将完成我们对STL基本思想的介绍以及对STL所提供工具的纵览。在本章中,我们主要关注算法。我们的主要目的是给你介绍一些最有用的算法,它们能够节省你大量时间,即使达不到以月计,也能达到以天计。每个算法都将通过其使用示例和支持的编程技术来介绍。本章的另一个目的是提供足够的工具,令你在需要标准库和其他库之外的特性时有能力自己编写优雅高效的算法。另外,本章还将介绍三种容器:map、set和unordered_map。

16.1 标准库算法


标准库大约提供了80种有用的算法。所有算法都至少在某些场景下对某些人是有用的;我们将在本章着重介绍其中一些对很多人通常都有用的算法以及一些对某些人极为有用的算法:

挑选的标准算法

r = f?ind(b,e,v) r指向[b:e)中v首次出现的位置

r = f?ind_if(b,e,p) r指向[b:e)中令p(x)为true的第一个元素x

x = count(b,e,v) x为v在[b:e)中出现的次数

x = count_if(b,e,p) x为[b:e)中满足p(x)为true的元素的个数

sort(b,e) 用<运算符对[b:e)排序

sort(b,e,p) 用谓词p对[b:e)排序

copy(b,e,b2) 将[b:e)拷贝至[b2:b2+(e-b));b2之后应有足够的空间用于存储元素

unique_copy(b,e,b2) 将[b:e)拷贝至[b2:b2+(e-b));不拷贝相邻的重复元素

merge(b,e,b2,e2,r) 将有序序列[b2:e2)和[b:e)合并,并放入[r:r+(e-b)+(e2-b2))之中

r = equal_range(b,e,v) r是有序范围[b:e)的一个子序列,且其中所有元素值均为v,本质上是通过二分搜索查找v

equal(b,e,b2) [b:e)和[b2:b2+(e-b))的所有元素对应相等?

x = accumulate(b,e,i) x是将i与[b:e]中所有元素进行累加的结果

x = accumulate(b,e,i,op) 与accumulate类似,但用op进行“求和”运算

x = inner_product(b,e,b2,i) x是[b:e)与[b2:b2+(e-b))的内积

x = inner_product(b,e,b2,i,op,op2) 与inner_product类似,但用op和op2取代内积的+和*

 

默认情况下,相等比较用==进行,而序则是基于<(小于)的。标准库算法可在<algorithm>找到。如果想获得更多信息,请参考附录C.5和16.2~16.5节中列出的资源。这些算法接受一个或几个序列。一个输入序列由一对迭代器定义,一个输出序列由一个指向首元素的迭代器定义。通常,一种算法可以由一个或多个操作参数化,这些操作可以定义为函数对象或函数。这些算法通常会通过返回输入序列尾来报告“失败”。例如,如果f?ind(b,e,v)未找到v,则返回e。


相关文章
|
13天前
|
机器学习/深度学习 安全 算法
【图论】【割点】【C++算法】928. 尽量减少恶意软件的传播 II
【图论】【割点】【C++算法】928. 尽量减少恶意软件的传播 II
|
25天前
|
机器学习/深度学习 存储 算法
神经网络分类算法原理详解
神经网络分类算法原理详解
47 0
|
12天前
|
机器学习/深度学习 自然语言处理 算法
|
1天前
|
数据可视化 算法
【视频】Copula算法原理和R语言股市收益率相依性可视化分析-1
【视频】Copula算法原理和R语言股市收益率相依性可视化分析
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
6天前
|
缓存 编译器 API
NumPy与其他语言(如C/C++)的接口实践
【4月更文挑战第17天】本文介绍了NumPy与C/C++的接口实践,包括Python与C/C++交互基础、NumPy的C API和Cython的使用。通过案例展示了如何将C++函数与NumPy数组结合,强调了内存管理、类型匹配、错误处理和性能优化的最佳实践。掌握这些技能对于跨语言交互和集成至关重要。
|
13天前
|
算法 测试技术 C#
【广度优先搜索】【堆】【C++算法】407. 接雨水 II
【广度优先搜索】【堆】【C++算法】407. 接雨水 II
|
13天前
|
算法 测试技术 Serverless
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
|
13天前
|
算法 测试技术 C#
【字典树】【KMP】【C++算法】3045统计前后缀下标对 II
【字典树】【KMP】【C++算法】3045统计前后缀下标对 II
|
20天前
|
存储 算法 编译器
【数据结构】栈算法(算法原理+源码)
【数据结构】栈算法(算法原理+源码)
【数据结构】栈算法(算法原理+源码)

热门文章

最新文章