c++使用 if_then_else 控制结构进行变换

发布于 2024-08-21 00:04:49 字数 538 浏览 4 评论 0原文

我正在尝试使用 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(.........................' 我读到控制结构的返回值是无效的,那么我在这种情况下尝试的使用完全错误吗?

预先感谢您的宝贵时间!

I'm trying to change the integer values in a vector using transform and an if_then_else control structure from Boost Lambda. However my compiler is not appreciating my efforts. The code I am attempting is:

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

I tried simplifying it to the following:

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

but the compiler tells me: no matching function for call to 'if_then_else(..........'
I read that the return values from control structures is void, so is my attempted usage in this case entirely wrong?

Thanks in advance for your time!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

笑红尘 2024-08-28 00:04:49

您的用法中的 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 用于三元条件。

if_then_else in your usage is incorrect, in the same way this is:

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

What you want is merely the ternary operator; however, this won't work in a lambda. You can simulate this with the the if_then_else_return structure instead. (i.e., you were close!)

The if_then_else is for something like a for_each loop, where you'd take one action or the other depending on a condition. The if_then_else_return is for a ternary conditional.

丘比特射中我 2024-08-28 00:04:49

由于您已经使用了 Boost,我建议使用 BOOST_FOREACH 而不是如此复杂的 lambda 表达式:

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

一旦新的基于范围的 for 循环可用,这将非常容易适应:

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

Since you already use Boost I recommend BOOST_FOREACH instead of such a complex lambda expression:

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

This will be very easy to adapt once the new range-based for loop becomes available:

for(int & i : v)
    i = rand() % ratio ? i : rand();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文