2017-02-05 8 views
1

У меня есть список вещей, которые я закодировал в std::vector<std::array<double,2>>. Это в основном список точек (x, y). Я хочу построить еще один список, но теперь точки (x, y^2).Применение функции к элементам вектора массивов

Я могу сделать это с помощью циклов, но лучший способ достичь этого с помощью алгоритмов STL? Я пытался сделать std::for_each в сочетании с лямбдами, но я пока не могу добраться.

+0

Вы должны опубликовать свою нерабочую попытку сделать это. В противном случае ответ будет «использовать std :: for_each» –

ответ

3

std::for_each применяет функцию к ряду элементов, если вы хотите применить функцию к диапазону и сохранить результат в другом диапазоне, вы должны использовать std::transform. например

std::transform(src.begin(), src.end(), std::back_inserter(dest), 
       [](const std::array<double,2>& arr) { return std::array<double,2>{arr[0], arr[1] * arr[1]}; });