std::from_range, std::from_range_t
Определён в заголовочном файле <ranges> | ||
|---|---|---|
struct from_range_t { explicit from_range_t() = default; };
| (since C++23) | |
inline constexpr std::from_range_t from_range {};
| (since C++23) |
std::from_range — это тег для устранения неоднозначности, который можно передать конструкторам соответствующих контейнеров, чтобы указать, что содержащийся в них элемент создаётся из диапазона.
Соответствующий тип std::from_range_t можно использовать в списке параметров конструктора для сопоставления с нужным тегом.
Стандартная библиотека
Следующие типы стандартной библиотеки используют тип std::from_range_t в своих конструкторах:
Библиотека контейнеров |
|
|
(C++23) | создаёт vector из диапазона (открытая функция-член std::vector<T,Allocator>) |
|
(C++26) | создаёт inplace_vector из диапазона (открытая функция-член std::inplace_vector<T,N>) |
|
(C++26) | создаёт hive из диапазона (открытая функция-член std::hive<T,Allocator>) |
|
(C++23) | создаёт deque из диапазона (открытая функция-член std::deque<T,Allocator>) |
|
(C++23) | создаёт forward_list из диапазона (открытая функция-член std::forward_list<T,Allocator>) |
|
(C++23) | создаёт list из диапазона (открытая функция-член std::list<T,Allocator>) |
|
(C++23) | создаёт set из диапазона (открытая функция-член std::set<Key,Compare,Allocator>) |
|
(C++23) | создаёт map из диапазона (открытая функция-член std::map<Key,T,Compare,Allocator>) |
|
(C++23) | создаёт multiset из диапазона (открытая функция-член std::multiset<Key,Compare,Allocator>) |
|
(C++23) | создаёт multimap из диапазона (открытая функция-член std::multimap<Key,T,Compare,Allocator>) |
|
(C++23) | создаёт unordered_set из диапазона (открытая функция-член std::unordered_set<Key,Hash,KeyEqual,Allocator>) |
|
(C++23) | создаёт unordered_map из диапазона (открытая функция-член std::unordered_map<Key,T,Hash,KeyEqual,Allocator>) |
|
(C++23) | создаёт unordered_multiset из диапазона (открытая функция-член std::unordered_multiset<Key,Hash,KeyEqual,Allocator>) |
|
(C++23) | создаёт unordered_multimap из диапазона (открытая функция-член std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>) |
|
(C++23) | создаёт priority_queue из диапазона (открытая функция-член std::priority_queue<T,Container,Compare>) |
|
(C++23) | создаёт queue из диапазона (открытая функция-член std::queue<T,Container>) |
|
(C++23) | создаёт stack из диапазона (открытая функция-член std::stack<T,Container>) |
|
(C++23) | создаёт flat_set из диапазона (открытая функция-член std::flat_set<Key,Compare,KeyContainer>) |
|
(C++23) | создаёт flat_map из диапазона (открытая функция-член std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>) |
|
(C++23) | создаёт flat_multiset из диапазона (открытая функция-член std::flat_multiset<Key,Compare,KeyContainer>) |
|
(C++23) | создаёт flat_multimap из диапазона (открытая функция-член std::flat_multimap<Key,T,Compare,KeyContainer,MappedContainer>) |
Библиотека строк |
|
|
(C++23) | создаёт basic_string из диапазона (открытая функция-член std::basic_string<CharT,Traits,Allocator>) |
Примечания
| Макрос проверки поддержки возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_containers_ranges | 202202L | (C++23) | Конструкторы с тегом для создания из диапазона, совместимого с контейнером |
Пример
#include <cassert>
#include <string>
int main()
{
#ifdef __cpp_lib_containers_ranges
auto const range = {0x43, 43, 43};
std::string str{std::from_range, range}; // uses tagged constructor
assert(str == "C++");
#endif
}
См. также
|
(C++17) | тег конструирования на месте (тег) |
|
(C++23) | указывает, что элементы диапазона отсортированы (уникальность не требуется) (тег) |
|
(C++23) | указывает, что элементы диапазона отсортированы и уникальны (тег) |
|
(C++23) | создаёт новый объект, не являющийся представлением, из входного диапазона (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/from_range