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

莱莱  金牌会员 | 2023-12-19 19:09:54 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 902|帖子 902|积分 2706

C++ 中    库好用的函数

泰裤辣!



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

记忆方法:advance-前进。
形如:advance(it, step),表示 it 迭代器自增 step 步。
实现类似于:
  1. function advance(&it, n):
  2.         while n > 0:
  3.                 --n
  4.                 ++it
  5.         while n < 0:
  6.                 ++n
  7.                 --it
复制代码
  1. function advance(&it, n):
  2.         it += n
复制代码
std::next & std::prev

记忆方法:自己问英语老师。
形如 next(it, n) 及 prev(it, n),默认 n = 1,表示迭代器前移、后移 n 位。
为 std::advance 的变体,区别在于返回了迭代器而传入迭代器不改变。
实现类似于:
  1. function next(it, n = 1): -> iterator
  2.         std::advance(it, n)
  3.         return it
  4. function prev(it, n = 1): -> iterator
  5.         std::advance(it, -n)
  6.         return it
复制代码
std::distance

记忆方法:distance-距离。
形如:distance(st, ed),表示迭代器 st 和 ed 之间的距离(从 st 跳到 ed 的距离)。
实现类似于:
  1. function distance(first, last):
  2.         result := 0
  3.         while first <> last:
  4.                 ++first
  5.                 ++result
  6.         return result
复制代码
  1. function distance(first, last):
  2.         return last - first
复制代码


简述:不用自己写 lambda 了。
[table][tr]函数表示[/tr][tr][td]2.3 算术运算[/td][td][/td][/tr][tr][td]plus[/td][td]实现 x + y 的函数对象 (类模板)[/td][/tr][tr][td]minus[/td][td]实现 x - y 的函数对象 (类模板)[/td][/tr][tr][td]multiplies[/td][td]实现 x * y 的函数对象 (类模板)[/td][/tr][tr][td]divides[/td][td]实现 x / y 的函数对象 (类模板)[/td][/tr][tr][td]modulus[/td][td]实现 x % y 的函数对象 (类模板)[/td][/tr][tr][td]negate[/td][td]实现 -x 的函数对象 (类模板)[/td][/tr][tr][td]2.4 比较[/td][td][/td][/tr][tr][td]equal_to[/td][td]实现 x == y 的函数对象 (类模板)[/td][/tr][tr][td]not_equal_to[/td][td]实现 x != y 的函数对象 (类模板)[/td][/tr][tr][td]greater[/td][td]实现 x > y 的函数对象 (类模板)[/td][/tr][tr][td]less[/td][td]实现 x < y 的函数对象 (类模板)[/td][/tr][tr][td]greater_equal[/td][td]实现 x >= y 的函数对象 (类模板)[/td][/tr][tr][td]less_equal[/td][td]实现 x ta。</p>形如 iota(begin, end, value),表示 [begin, end) 从 value 开始,递增填充。
实现类似于:
  1. function iota(first, last, value):
  2.         while first <> last:
  3.                 [first] := value
  4.                 ++first
  5.                 ++value
复制代码
std::accumulate

记忆方法:accumulate-积累。
形如 accumulate(begin, end, value),表示 [begin, end) 从 value 开始,求和。
实现类似于:
  1. function accumulate(first, last, init): -> type
  2.         while first <> last:
  3.                 init := init + [first]
  4.                 ++first
  5.         return init
复制代码
形如 accumulate(begin, end, value, fun),表示 [begin, end) 从 value 开始,对 fun 函数执行。
实现类似于:
  1. function accumulate(first, last, init, op): -> type
  2.         while first <> last:
  3.                 init := op(init, [first])
  4.                 ++first
  5.         return init
复制代码
std::partial_sum

记忆方法:前缀那一部分求和
形如:partial_sum(begin, end, dist),表示 [begin, end) 的前缀和放在 dist 开始的位置,返回终止迭代器。
实现类似于:
  1. function partial_sum(first, last, d_first): -> iterator
  2.         if first == last:
  3.                 return d_first
  4.         [d_first] := [first]
  5.         sum := [first]
  6.         while ++first <> last:
  7.                 sum := sum + [first]
  8.                 [++d_first] := sum
  9.         return ++d_first
复制代码
形如:partial_sum(begin, end, dist),表示求 [begin, end) 的 fun 函数前缀,放在 dist 开始的位置,返回终止迭代器。
实现类似于:
  1. function partial_sum(first, last, d_first, op): -> iterator
  2.         if first == last:
  3.                 return d_first
  4.         sum := [first]
  5.         [d_first] := sum
  6.         while ++first <> last:
  7.                 sum := op(sum, [first])
  8.                 [++d_first] := sum
  9.         return ++d_first
复制代码
std::adjacent_difference

记忆方法:adjacent-相邻的,difference-差值。
形如:adjacent_difference(begin, end, dist),表示 [begin, end) 对相邻两项的差值,放在 dist + 1 开始的位置,返回终止迭代器。
实现类似于:
  1. function adjacent_difference(first, last, d_first): -> iterator
  2.         if first == last:
  3.                 return d_first
  4.         acc := [first]
  5.         [d_first] := acc
  6.         while ++first <> last:
  7.                 val := [first]
  8.                 [++d_first] := val - acc
  9.                 acc := val
  10.         return ++d_first
复制代码
形如:adjacent_difference(begin, end, dist, op),表示 [begin, end) 对相邻两项的 op 函数值,放在 dist + 1 开始的位置,返回终止迭代器。
实现类似于:
  1. function adjacent_difference(first, last, d_first): -> iterator
  2.         if first == last:
  3.                 return d_first
  4.         acc := [first]
  5.         [d_first] := acc
  6.         while ++first <> last:
  7.                 val := [first]
  8.                 [++d_first] := op(val, acc)
  9.                 acc := val
  10.         return ++d_first
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莱莱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表