【问题标题】:is it possible to recreate for loop in c++ with a function是否可以使用函数在 C++ 中重新创建 for 循环
【发布时间】:2011-06-26 19:59:23
【问题描述】:

我最近写了一个简单的宏,因为我厌倦了为需要循环的每个向量输入相同的内容:

#define FORVEC(a,b) for(int b=0;b<a.size();b++)

所以我可以做类似的事情

vector<sometype> stuff

FORVEC(stuff,i)
{
     stuff[i].dosomething();
}

我尽量避免使用宏,因为一位更有经验的程序员曾告诉我要尽可能避免使用宏。另外,我只是对如何使用函数(或任何需要的函数)完成它感到好奇,因为这是我想探索的领域。不一定要专门重新创建这个宏,虽然这将是一个好的开始,但是在定义它之后,我可以做一些类似的事情

mylooperfunction(param1,param2,param3) 
{
     //and now any code here would be run and looped in a way controlled by and defined in mylooperfunction
}

【问题讨论】:

  • 你在使用 Boost,即BOOST_FOREACH?
  • 我不是,但现在每当我研究我想做的事情时,似乎都会出现 BOOST 这个词,是时候开始学习了。另外,我想我的问题的第二部分不清楚。是否可以创建自己的函数来执行 std::for_each 或 BOOST_FOREACH 的功能?
  • C++0x 是一个选项吗?基于范围的 for 循环非常方便。
  • 关于宏的注释:如果你想改变某些语法的工作方式,你需要一个宏。 BOOST_FOREACH 也是一个宏。

标签: c++ templates function loops


【解决方案1】:

BOOST_FOREACH 中有一个更高级的版本,您可以在 C++03 中使用它。你说的不是 C++03,而是是在 C++0x 中引入了 lambda 表达式。

std::for_each(vec.begin(), vec.end(), [&](const T& ref) {
    ref.do_something();
});

专门为此用途,甚至还有一个新的语言功能,在我看来这是一个可怕的错误,但这只是我。上面的代码更通用。

【讨论】:

  • 更好的是基于范围的 for 循环。
  • @GMan:@DeadMG 似乎完全不喜欢,如果不是讨厌基于范围的for。 :) 这就是他最后一段所说的。
  • @Xeo:哦,现在确实更有意义了,而且我记得我知道那个不正确的意见。
【解决方案2】:

STL 算法提供您正在寻找的功能:std::for_each

【讨论】:

  • 哇...知道这很有用...谢谢,但正如我所说...仍然想知道是否可以编写自己的函数来执行此操作,以及如何
  • 你可以自己写一个模板函数,如果你点击我的链接,你可以看到它的样子。
【解决方案3】:

已经有两种解决方案可以做到这一点:BOOST_FOREACH 和 std::for_each。

【讨论】:

    【解决方案4】:

    接下来会发生什么:

    1. 您忘记了宏的名称
    2. 您开始一遍又一遍地输入现有的迭代器内容
    3. 很快就可以自动输入,操作起来既简单又快捷
    4. 那么您的宏将不再需要

    当然,到达那里需要一点努力,但每个人都会在某个时候到达那里......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-10
      • 2014-03-31
      • 2013-07-20
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多