我正在尝试使用变换和Boost Lambda中的if_then_else控制结构来更改向量中的整数值。但是我的编译器并不赞赏我的努力。我正在尝试的代码是:
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(..........' 我读到控制结构的返回值是无效的,那么我在这种情况下的尝试用法是完全错误的吗?
提前感谢您的时间!
答案 0 :(得分:1)
if_then_else
不正确,与此相同:
int i = if (some_condition){ 0; } else { 1; };
你想要的只是三元运算符;但是,这不适用于lambda。您可以使用if_then_else_return
结构来模拟它。 (即你很亲密!)
if_then_else
用于for_each
循环,您可以根据条件采取一个动作或另一个动作。 if_then_else_return
用于三元条件。
答案 1 :(得分:1)
由于你已经使用了Boost,我推荐BOOST_FOREACH而不是这么复杂的lambda表达式:
BOOST_FOREACH(int & i, v)
i = rand() % ratio ? i : rand();
一旦新的基于范围的for循环可用,这将非常容易适应:
for(int & i : v)
i = rand() % ratio ? i : rand();