Page Top

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

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
posted @   RainPPR  阅读(133)  评论(1)    收藏  举报
点击右上角即可分享
微信分享提示