преобразование с ++ с управляющей структурой if_then_else - PullRequest
0 голосов
/ 12 февраля 2010

Я пытаюсь изменить целочисленные значения в векторе, используя transform и управляющую структуру if_then_else из Boost Lambda. Однако мой компилятор не оценивает мои усилия. Код, который я пытаюсь использовать:

transform(theVec.begin(), theVec.end(), theVec.begin(), 
          if_then_else(bind(rand) % ratio == 0, _1 = bind(rand) % maxSize, _1));

Я попытался упростить это до следующего:

transform(theVec.begin(), theVec.end(), theVec.begin(),
          if_then_else(0 == 0, _1 = MaxIntSizeCFG, _1));

но компилятор говорит мне: нет соответствующей функции для вызова 'if_then_else (..........' Я прочитал, что возвращаемые значения из управляющих структур недействительны, так что моя попытка использования в этом случае совершенно неверна?

Заранее спасибо за ваше время!

Ответы [ 2 ]

1 голос
/ 12 февраля 2010

Поскольку вы уже используете Boost, я рекомендую BOOST_FOREACH вместо такого сложного лямбда-выражения:

BOOST_FOREACH(int & i, v)
    i = rand() % ratio ? i : rand();

Это будет очень легко адаптировать, как только станет доступен новый цикл для диапазона:

for(int & i : v)
    i = rand() % ratio ? i : rand();
1 голос
/ 12 февраля 2010

if_then_else в вашем использовании неверно, так же, как это:

int i = if (some_condition){ 0; } else { 1; };

То, что вы хотите, это просто троичный оператор; однако, это не будет работать в лямбде. Вместо этого вы можете смоделировать это с помощью структуры if_then_else_return. (то есть вы были близки!)

if_then_else - это что-то вроде цикла for_each, где вы выполняете одно или другое действие в зависимости от условия. if_then_else_return для троичного условного.

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