【问题标题】:Using the Lambda Function with Objects and for_each loops将 Lambda 函数与对象和 for_each 循环一起使用
【发布时间】:2019-02-25 07:06:45
【问题描述】:

我试图更好地理解一些关于使用带有对象向量和 std::for_each() 循环的 lambda 函数的基本概念。

我正在尝试将someObjectVector.end()->someObjectVectorMethod()const int 内容传递给i,但找不到实现它的方法。

我还想使用这些迭代器来设置std::for_each() 循环的参数。这是不可能的,还是我在语法上以错误的方式接近这个?

std::for_each(someObjectVector.begin()->someObjectVectorMethod(), (someObjectVector.end()->getSomeObjectVectorData(), [&](int i)
{
    someObjectVector[0].setSomeObjectVectorDate() + i;
});

【问题讨论】:

  • 您能否提供一个示例,说明您的输入是什么以及您想要什么作为输出,可能是一个可以编译的代码 sn-p?我不完全确定你只是通过阅读问题来实现什么。
  • someObjectVector.end()->someObjectVectorMethod() 无效。 .end() 指向向量的最后一个元素。

标签: c++ object lambda foreach


【解决方案1】:

你的语法肯定是错误的。

作为输入,std::for_each() 期望

  • 由 2 个输入迭代器表示的元素范围

  • 一个一元函数对象,该范围内的每个元素都将作为唯一的输入参数传递给该对象。

在您的代码中,someObjectVectorMethod()getSomeObjectVectorData() 不是迭代器,并且您的 lambda 不接受向量元素作为输入。

你想用你的代码完成什么?您可能需要更多类似的东西:

std::vector<YourObjectType> someObjectVector;
...
std::for_each(someObjectVector.begin(), someObjectVector.end(),
    [](YourObjectType &obj) {
        obj.setSomeObjectVectorData(...);
    }
);

或者:

std::vector<YourObjectType*> someObjectVector;
...
std::for_each(someObjectVector.begin(), someObjectVector.end(),
    [](YourObjectType *obj) {
        obj->setSomeObjectVectorData(...);
    }
);

取决于在您的代码中实际声明 someObjectVector 的方式。

调整上述 lambda 表达式以满足您的实际需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2012-08-10
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    相关资源
    最近更新 更多