Использование лямбда-функции с объектами и циклами for_each - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь лучше понять некоторые фундаментальные понятия о работе с лямбда-функциями с вектором объектов и std::for_each() петлями.

Я пытаюсь передать const int содержимое someObjectVector.end()->someObjectVectorMethod() в i, но просто не могу найти способ, чтобы это произошло.

Я также хочу использовать эти итераторы для установки параметров цикла std::for_each().Это просто невозможно, или я синтаксически подхожу к этому неправильно?

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

1 Ответ

0 голосов
/ 21 сентября 2018

Ваш синтаксис определенно неверен.

В качестве ввода std::for_each() ожидает

  • диапазон элементов, обозначаемых 2 итераторами ввода

  • объект унарной функции, в который каждый элемент в этом диапазоне будет передаваться как единственный входной параметр.

В вашем коде someObjectVectorMethod() и getSomeObjectVectorData() не являютсяитераторы, и ваша лямбда не принимает элемент вектора в качестве входных данных.

Что вы пытаетесь достичь с помощью своего кода?Вам, вероятно, нужно что-то более похожее на это:

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 фактически объявлено в вашем коде.

Настройтевыше лямбды, чтобы удовлетворить ваши реальные потребности.

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