C++ 中 <iterator> <functional> <numeric> 库好用的函数详解

 更新时间:2023年11月17日 09:48:43   作者:RainPPR  
这篇文章主要介绍了C++ 中 <iterator> <functional> <numeric> 库好用的函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

<iterator>

简述:迭代器省代码用的。

std::advance

记忆方法:advance-前进。

形如:advance(it, step),表示 it 迭代器自增 step 步。

实现类似于:

function advance(&it, n):
	while n > 0:
		--n
		++it
	while n < 0:
		++n
		--it

function advance(&it, n):
	it += n

std::next & std::prev

记忆方法:自己问英语老师。

形如 next(it, n) 及 prev(it, n),默认 n = 1,表示迭代器前移、后移 n 位。

为 std::advance 的变体,区别在于返回了迭代器而传入迭代器不改变。

实现类似于:

function next(it, n = 1): -> iterator
	std::advance(it, n)
	return it
function prev(it, n = 1): -> iterator
	std::advance(it, -n)
	return it

std::distance

记忆方法:distance-距离。

形如:distance(st, ed),表示迭代器 st 和 ed 之间的距离(从 st 跳到 ed 的距离)。

实现类似于:

function distance(first, last):
	result := 0
	while first <> last:
		++first
		++result
	return result

function distance(first, last):
	return last - first

<functional>

简述:不用自己写 lambda 了。

函数表示
2.3 算术运算
plus实现 x + y 的函数对象 (类模板)
minus实现 x - y 的函数对象 (类模板)
multiplies实现 x * y 的函数对象 (类模板)
divides实现 x / y 的函数对象 (类模板)
modulus实现 x % y 的函数对象 (类模板)
negate实现 -x 的函数对象 (类模板)
2.4 比较
equal_to实现 x == y 的函数对象 (类模板)
not_equal_to实现 x != y 的函数对象 (类模板)
greater实现 x > y 的函数对象 (类模板)
less实现 x < y 的函数对象 (类模板)
greater_equal实现 x >= y 的函数对象 (类模板)
less_equal实现 x <= y 的函数对象 (类模板)
2.6 逻辑运算
logical_and实现 x && y 的函数对象 (类模板)
logical_or实现 x || y 的函数对象 (类模板)
logical_not实现 !x 的函数对象 (类模板)
2.7 逐位运算
bit_and实现 x & y 的函数对象 (类模板)
bit_or实现 x | y 的函数对象 (类模板)
bit_xor实现 x ^ y 的函数对象 (类模板)
bit_not实现 ~x 的函数对象 (类模板)

<numeric>

简述:奇奇怪怪的简化程序写法的库。

std::iota

记忆方法:increase-(output)->ta

形如 iota(begin, end, value),表示 [begin, end) 从 value 开始,递增填充。

实现类似于:

function iota(first, last, value):
	while first <> last:
		[first] := value
		++first
		++value

std::accumulate

记忆方法:accumulate-积累。

形如 accumulate(begin, end, value),表示 [begin, end) 从 value 开始,求和。

实现类似于:

function accumulate(first, last, init): -> type
	while first <> last:
		init := init + [first]
		++first
	return init

形如 accumulate(begin, end, value, fun),表示 [begin, end) 从 value 开始,对 fun 函数执行。

实现类似于:

function accumulate(first, last, init, op): -> type
	while first <> last:
		init := op(init, [first])
		++first
	return init

std::partial_sum

记忆方法:前缀那一部分求和

形如:partial_sum(begin, end, dist),表示 [begin, end) 的前缀和放在 dist 开始的位置,返回终止迭代器。

实现类似于:

function partial_sum(first, last, d_first): -> iterator
	if first == last:
		return d_first
	[d_first] := [first]
	sum := [first]
	while ++first <> last:
		sum := sum + [first]
		[++d_first] := sum
	return ++d_first

形如:partial_sum(begin, end, dist),表示求 [begin, end) 的 fun 函数前缀,放在 dist开始的位置,返回终止迭代器。

实现类似于:

function partial_sum(first, last, d_first, op): -> iterator
	if first == last:
		return d_first
	sum := [first]
	[d_first] := sum
	while ++first <> last:
		sum := op(sum, [first])
		[++d_first] := sum
	return ++d_first

std::adjacent_difference

记忆方法:adjacent-相邻的,difference-差值。

形如:adjacent_difference(begin, end, dist),表示 [begin, end) 对相邻两项的差值,放在 dist + 1 开始的位置,返回终止迭代器。

实现类似于:

function adjacent_difference(first, last, d_first): -> iterator
	if first == last:
		return d_first
	acc := [first]
	[d_first] := acc
	while ++first <> last:
		val := [first]
		[++d_first] := val - acc
		acc := val
	return ++d_first

形如:adjacent_difference(begin, end, dist, op),表示 [begin, end) 对相邻两项的 op 函数值,放在 dist + 1 开始的位置,返回终止迭代器。

实现类似于:

function adjacent_difference(first, last, d_first): -> iterator
	if first == last:
		return d_first
	acc := [first]
	[d_first] := acc
	while ++first <> last:
		val := [first]
		[++d_first] := op(val, acc)
		acc := val
	return ++d_first

到此这篇关于C++ 中 &lt;iterator&gt; &lt;functional&gt; &lt;numeric&gt; 库好用的函数的文章就介绍到这了,更多相关C++ &lt;iterator&gt; &lt;functional&gt; &lt;numeric&gt; 库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • VC++实现添加文件关联的方法示例

    VC++实现添加文件关联的方法示例

    这篇文章主要介绍了VC++实现添加文件关联的方法,涉及VC++针对注册表的写入与VC事件响应相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • 剑指offer之C语言不修改数组找出重复的数字

    剑指offer之C语言不修改数组找出重复的数字

    今天小编就为大家分享一篇关于剑指offer之C语言不修改数组找出重复的数字,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 详解C语言通过递归与非递归实现蛇形矩阵

    详解C语言通过递归与非递归实现蛇形矩阵

    蛇形矩阵(Snake matrix)是矩阵的一种,常被应用在编程题目与数学数列中,需要提取每条斜线里最小的数字,本篇文章将会通过递归和非递归来分别实现蛇形矩阵
    2022-02-02
  • 浅谈C语言中include

    浅谈C语言中include""与include<>的区别

    C语言中包含文件有两种包含符号,一个是<>尖括号,另一个是""双引号。那么这两个有什么区别呢?本文就详细的介绍一下,感兴趣的可以了解一下
    2021-06-06
  • C++模板类的用法

    C++模板类的用法

    这篇文章主要介绍了C++模板类的用法,实例讲述了模板类的概念及相关用法,需要的朋友可以参考下
    2014-10-10
  • C++事件驱动型银行排队模拟

    C++事件驱动型银行排队模拟

    这篇文章主要为大家详细介绍了C++事件驱动型银行排队模拟,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • OpenCV实现倾斜文字校正

    OpenCV实现倾斜文字校正

    这篇文章主要为大家详细介绍了OpenCV实现倾斜文字校正,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Qt自定义控件实现进度仪表盘

    Qt自定义控件实现进度仪表盘

    这篇文章主要介绍了Qt自定义控件实现进度仪表盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • C语言实现常见进制转换的示例代码

    C语言实现常见进制转换的示例代码

    生活中最常见的进制是十进制,而有一类编程题会要求将十进制转换为其他进制,本文将主要讲述C语言中常见的几类进制转换问题,希望对大家有所帮助
    2023-04-04
  • C语言函数调用堆栈详情分析

    C语言函数调用堆栈详情分析

    这篇文章主要介绍了C语言函数调用堆栈详情分析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07

最新评论