C++ 中 <iterator> <functional> <numeric> 庫好用的函數 泰褲辣! <iterator> 簡述:迭代器省代碼用的。 std::advance 記憶方法:advance-前進。 形如:advance(it, step),表示 it 迭代器自增 step 步。 實現類 ...
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
本文來自博客園,作者:RainPPR,轉載請註明原文鏈接:https://www.cnblogs.com/RainPPR/p/iterator-functional-numeric.html