Введение
С появлением библиотеки Ranges необходимость в обозначении диапазона двумя итераторами практически исчезла.Например, вместо
if (std::equal(begin(foo), end(foo), begin(bar), end(bar)))
мы имеем
if (std::ranges::equal(foo, bar))
Последний, вероятно, превосходит не только из-за его краткости, но также потому, что он предотвращает общую ловушку пропуска end(bar)
и приветствуя связанные ошибки.
Задача
Как насчет следующего кода?
std::vector<int> vec{begin(foo), end(foo)};
, где foo
- диапазон.С Ranges я бы ожидал упростить его до
std::vector<int> vec{foo};
Однако я не могу найти упоминания об этом в [vector] или [container.requirements] .Также библиотека Ranges не представляет новый набор контейнеров.
Почему библиотека Ranges не поддерживает инициализацию контейнера из диапазона?Каково обоснование?