Как создать для цикла как команду в C ++? - PullRequest
0 голосов
/ 17 октября 2008

Я хочу сделать что-то очень простое в C ++, но не могу найти как. Я хочу создать функцию, подобную циклу for, в которой в идеале я буду вводить переменную для случаев, когда должна произойти итерация, и некоторые функции в скобках будут выполнять мою функцию. Я надеюсь, что я был достаточно ясен. Спасибо ...

Пример

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

Ответы [ 7 ]

9 голосов
/ 17 октября 2008
#define superFor(n) for(int i = 0; i < (n); i++)

Редактировать: будьте осторожны, чтобы не использовать другую переменную с именем i в цикле.

6 голосов
/ 17 октября 2008

То, что вы хотите, невозможно в 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.

3 голосов
/ 17 октября 2008

в C ++ вы делаете это с помощью обычного цикла for.

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

В вашем цикле: Переменная переменная, как я. Вы можете определить переменную прямо здесь и инициализировать ее. Вы часто видите что-то вроде "int i = 0"

условие - это своего рода тест. В вашем случае вы хотите проверить, меньше ли ваша переменная подсчета, чем сколько раз вы хотите выполнить цикл. Вы бы поместили что-то вроде «я

increment - команда для увеличения счетной переменной. В вашем случае вы хотите «i ++», что является кратким способом сказать «i = i + 1»

Итак, это дает нам:

  for(int i = 0; i < how_many_times_to_loop; i++) {
    //stuff goes here
  }
2 голосов
/ 17 октября 2008

Это безумие, но это может сработать ...

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

1 голос
/ 17 октября 2008

Вы можете использовать макрос.

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

и используйте его так:

superFor(i,10) {
   printf("Doing something ten times");
}
0 голосов
/ 17 октября 2008

Может быть, BOOST_FOREACH сделает то, что вы хотите:

http://engineering.meta -comm.com / ресурсы / CS-win32_metacomm / DOC / HTML / foreach.html

0 голосов
/ 17 октября 2008
void DoSomethingRepeatedly(int numTimesTo Loop)
{
   for(int i=0; i<numTimesToLoop; i++)
   { 
       //do whatever; 
   }
}

Что это? Это не может быть .. слишком просто .. Я, должно быть, неправильно понимаю ваш вопрос :( Конечно, вам нужно проверить, что значение numTimesToLoop>> 0.

Edit: я сделал это методом, на всякий случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...