Я пришел из мира C #, где я могу написать что-то вроде:
var newList = oldList.Select(x => x * 2).Where(x => x > 3).ToList();
Это позволяет мне взять список, каким-то образом преобразовать его и сохранить результат в новом списке.
Я хотел бы сделать то же самое в C ++, используя Диапазон-v3. Я понимаю, как работают преобразования, но делает Диапазон-v3 обеспечить аналогичные «приемные» методы для вычисления и сбора результатов?
Я ищу что-то вроде toVector
, который будет вычислять результирующий диапазон в только что выделенный std::vector
,
Вы можете сделать:
std::vector<int> v2 = v
| ranges::view::transform([](int x) { return x * 2; })
| ranges::view::filter([](int x) { return x > 3; });
Или, если вы предпочитаете auto
налево:
auto v2 = v
| ranges::view::transform([](int x) { return x * 2; })
| ranges::view::filter([](int x) { return x > 3; })
| ranges::to_vector;
Других решений пока нет …