将Lambda函数与对象和for_each循环一起使用

时间:2018-09-20 22:19:04

标签: c++ object lambda foreach

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

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

我还想使用那些迭代器来设置i循环的参数。这是不可能的吗?还是我在语法上错误地对待了这种方法?

std::for_each()

1 个答案:

答案 0 :(得分:0)

您的语法肯定是错误的。

作为输入,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以适合您的实际需求。