首页 > 编程语言 >C++ 中 <iterator> <functional> <numeric> 库好用的函数

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

时间:2023-11-14 19:00:42浏览次数:34  
标签:last 函数 库好 ++ C++ return 模板 first

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),表示迭代器 sted 之间的距离(从 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

标签:last,函数,库好,++,C++,return,模板,first
From: https://www.cnblogs.com/RainPPR/p/iterator-functional-numeric.html

相关文章

  • this的题目,我都是这样理解的,,除了箭头函数,this的指向就看它的直接调用者是谁!而箭头函数
    假设document是HTML文档中的一个节点,点击该节点后会发生什么?functiontest(){this.flag=false;this.change=()=>{this.flag=true;console.log(button.flag);};}constbutton=newtest();document.addEventListener("click",button.change);A......
  • 类必须使用new调用,否则会报错。这是它跟普通构造函数的一个主要区别,后者不用new也可以
    以下符合ES6写法的有:()AclassFoo{constructor(){returnObject.create(null);}}Foo()Bvarm=1;exportm;CexportvarfirstName=’Michael’;D在A模块中export{readFile}后,在B模块中importreadFilefrom‘A’可以获取到readFile正确答案:CA、Fun()把class当......
  • ES6的箭头函数,箭头函数不会创造块作用域,无法生成一个独立的环境,this指向上层的this
    varcolor='green';vartest4399={color:'blue',getColor:function(){varcolor="red";alert(this.color);}}vargetColor=test4399.getColor;getColor();test4399.getColor();以上JavaScrip......
  • 任何用let或const声明的属性不能够从它被声明的作用域中删除。任何使用 var 声明的属
    请问以下JS代码的输出结果是什么?leta=1;letobj={x:1}deletea;deleteobj.x;delete2;console.log(a);console.log(obj.x);console.log(2);A1、1、2B1、undefined、2C1、undefined、undefinedDundefined、undefined、undefined正确答案:B需要明确的......
  • 无涯教程-Dart - compareTo函数
    它返回一个整数,指示两个数字之间的关系。compareTo-语法Number.compareTo(x)x  - 代表一个数字。compareTo-返回值返回值-0  - 如果值相等。1  - 如果当前数字对象大于指定的数值。-1 - 如果当前数字对象小于指定的数字值。compareTo-......
  • 【每日例题】蓝桥杯 c++ 被替换的身份证
    被替换的身份证题目蓝桥杯被替换的身份证思路分析斗地主简化版?!废话少说,四种情况ShallowDream一开始出对子或者王炸,ShallowDream胜ShallowDream一开始出单,Joker出王炸,Joker胜ShallowDream一开始出单,Joker手中最大的牌比ShallowDream手中的牌都大,Joker胜ShallowDream一开......
  • 无涯教程-Dart - ceil函数
    此属性返回上限值,该上限值是大于或等于数字的最小整数。ceil-语法Number.ceil()ceil-示例voidmain(){vara=2.4;print("HiLearnfkTheceilingvalueof2.4=${a.ceil()}");}它将产生以下输出-。HiLearnfkTheceilingvalueof2.4=3参考链接http......
  • Python基础之map()函数
    map()函数会根据提供的对指定的可迭代对象的每个元素进行运算,并将返回运算结果的迭代器。先去将几个例子,这样比较通俗易懂。eg1:输入数据型a=map(int,input().split())输入:1213结果为:分析:map(int,input().split())将输入的值(input.split()的东西也叫做可迭代对象)通过空格......
  • YCOJ734 [ 20231114 NOIP 模拟赛 T3 ] 二次函数
    题意给定\(n\)个形如\(f(x)=(x-m)^2+k\)的二次函数。\(1,m,k\)表示加入一个顶点位\((m,k)\)的二次函数。\(2,x,t\)表示删除所有\(f(x)\let\)的二次函数。求每次操作结束后还剩余几个二次函数。Sol注意到题中二次系数为\(1\),这就意味着每一个函......
  • 无涯教程-Dart - isEven函数
    如果数字为偶数,则此属性返回true。isEven-语法num.isEvenisEven-示例voidmain(){intposNum=10;print(posNum.isEven);}它将产生以下输出-true参考链接https://www.learnfk.com/dart-programming/dart-programming-iseven-property.html......