@Fortunato28

Как правильно применить функцию ко всем элементам двумерного вектора?

std::for_each(matrix.begin(), matrix.end(), [&](vector<Cell> cellLine)
    {
        std::for_each(cellLine.begin(), cellLine.end(), [&](Cell cell)
        {
            cell.showBody();
        });
    });


Приведёный выше код компилируется и работает, обходит каждый элемент матрицы, как будто вызывает нужный метод каждой клетки, но при этом сами элементы двумерного вектора не меняются, хотя должны. Подозреваю, что где-то не понимаю чего-то в лямбдах. В чём тту дело?
  • Вопрос задан
  • 404 просмотра
Решения вопроса 2
myjcom
@myjcom Куратор тега C++
что то мудрено как то...
for(auto &cellLine:matrix)
{
    for(auto &cell:cellLine)
    {
        cell.showBody();
    }
}

foreach и лямбда-функции здесь явно лишние.
про передачу по ссылке уже написал cppjunkie
Ответ написан
@cppjunkie
Не меняются скорее всего из-за того что аргумент в лямбду передаётся по значению, поэтому весь вектор копируется и изменяется уже его копия. По-моему если поменять с

vector<Cell> cellLine

на

vector<Cell> &cellLine

то должно заработать. То же самое надо сделать и во внутреннем цикле относительно параметра Cell.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы