Как я буду передавать диапазоны вместо пар итераторов в C ++ 20? - PullRequest
11 голосов
/ 10 мая 2019

Я слышал, что C ++ 20 будет поддерживать работу с диапазонами, а не только пары итератор begin + end. Означает ли это, что в C ++ 20 я смогу написать:

std::vector<int> vec = get_vector_from_somewhere();
std::sort(vec);
std::vector<float> halves; 
halves.reserve(vec.size());
std::transform(
    vec, std::back_inserter(halves),
    [](int x) { return x * 0.5; }
);

1 Ответ

11 голосов
/ 10 мая 2019

Почти да!

Вам просто нужно будет использовать пространство имен std::ranges:: вместо std::;по крайней мере, это то, что Эрик Ниблер говорит в своем блоге.Таким образом, вы должны написать:

std::vector<int> vec = get_vector_from_somewhere();
std::ranges::sort(vec);
std::vector<float> halves; 
halves.reserve(vec.size());
std::ranges::transform(
    vec, std::back_inserter(halves),
    [](int x) { return x * 0.5; }
);

Вы также можете взглянуть на страницу cppreference на std::all_ofnone_of и any_of) для подробного примераКод C ++ 20 в стиле <algorithm>;но не все эти страницы были написаны на cppreference.com.

...