人气 133

[游戏程序] 介绍一种强大的For函数 [复制链接]

九艺网 2017-3-10 17:00:23

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
[table][tr][td]template  T For(int from, int to, FAdd fAdd, FElem fElem)
{
  assert(to >= from);
  T sum = fElem(from);
  for (int i = from + 1; i
0213eada7b7edfb72d5c2e56c4012f9d.gif


再比如更复杂的,字符串之间以 "," 相连,例如我们要生成一个表示一个数组的字符串,
例如 to_str(x[0]) + "," + to_str(x[1]) + "," +  ... + "," + to_str(x[n-1])

94f7159f90d2cec69ed847b002293622.gif


这个计算,用我们在本文开头定义的 For 函数可以写成:
str add(str a, str b) { return a + "," + b; }
For(0, n-1, add, [](int i){ return to_str(x<i>); })
// 或者:
For(0, n-1, [](str a, str b) { return a + "," + b; }, [](int i) { return to_str(x<i>); })

PS. 有时候考虑到性能,我们还可以有一种变种版本:

template  T For(int from, int to, T sum0, F f)
{
  if (to < from)
  return sum0;

  T sum = sum0;
  for (int i = from; i
cea1d1d7f472f11d6ec530347f13b8ef.gif
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-5-13 06:16 , Processed in 0.059332 second(s), 26 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.