0

我想在 C++ 中做一些非常简单的事情,但我找不到如何做。我想创建一个类似于 for 循环的函数,理想情况下,我将在其中输入一个变量来表示迭代应该发生的时间,并且括号内的一些函数将执行我的函数。我希望我足够清楚。谢谢...

例子

superFor (1)
{
  //commands to be executed here  
  add(1+2);
}
4

7 回答 7

9
#define superFor(n) for(int i = 0; i < (n); i++)

编辑:注意不要在循环中使用另一个名为 i 的变量。

于 2008-10-17T14:48:22.710 回答
6

你想要的在 C++ 中是不可能的,因为(当前版本的)语言缺少这里需要的一些特性:即“动态”创建功能块。

您可以做的最好的事情是将函数指针或函数对象传递给您的函数。STL 提供了很多这样的例子。考虑:

void out(int x) {
    cout << x << ' ';
}

vector<int> xs;
xs.push_back(42);
xs.push_back(23);

for_each(xs.begin(), xs.end(), out);

这会将指向函数的指针传递给out函数for_each

于 2008-10-17T14:48:05.253 回答
3

在 C++ 中,您使用常规的 for 循环来做到这一点。

  for(variable; condition; increment) {
    //stuff goes here
  }

在你的 for 循环中:变量是一个像 i 一样的计数变量。您可以在此处定义变量并对其进行初始化。你经常看到像“int i = 0”这样的东西

条件是某种测试。在您的情况下,您想检查您的计数变量是否小于您希望循环执行的次数。你会放一些像“i < how_many_times_to_loop”

increment 是增加计数变量的命令。在您的情况下,您想要“i++”,这是说“i = i + 1”的简写方式

所以这给了我们:

  for(int i = 0; i < how_many_times_to_loop; i++) {
    //stuff goes here
  }
于 2008-10-17T14:52:54.573 回答
2

这很疯狂,但它可能只是工作......

http://www.boost.org/doc/libs/1_36_0/doc/html/lambda.html

于 2008-10-17T14:52:23.233 回答
1

你可以使用宏。

#define superFor(v,i) for(int v=0; v<(i); v++)

并像这样使用它:

superFor(i,10) {
   printf("Doing something ten times");
}
于 2008-10-17T14:51:03.843 回答
0
void DoSomethingRepeatedly(int numTimesTo Loop)
{
   for(int i=0; i<numTimesToLoop; i++)
   { 
       //do whatever; 
   }
}

那呢?那不可能..太简单了..我一定误解了你的问题:(当然你必须检查 numTimesToLoop 的值是否> = 0。

编辑:我把它做成了一种方法,以防万一。

于 2008-10-17T14:47:49.390 回答
0

也许 BOOST_FOREACH 会做你想做的事:

http://engineering.meta-comm.com/resources/cs-win32_metacomm/doc/html/foreach.html

于 2008-10-17T14:49:16.517 回答