std::from_range, std::from_range_t
С сайта ru.cppreference.net
| Определено в заголовке <ranges>
|
||
struct from_range_t { explicit from_range_t() = default; };
|
(начиная с C++23) | |
inline constexpr std::from_range_t from_range {};
|
(начиная с C++23) | |
std::from_range — это метка разграничения, которая может быть передана конструкторам подходящих контейнеров, чтобы указать, что внутренний элемент конструируется из диапазона.
Соответствующий тип std::from_range_t может использоваться в списке параметров конструктора для сопоставления с предполагаемой меткой.
Стандартная библиотека
Следующие типы стандартной библиотеки используют
std::from_range_t
тип в своих конструкторах:
Библиотека контейнеров | |
(C++23) |
создаёт vector из диапазона (public member function of std::vector<T,Allocator>)
|
(C++26) |
создаёт inplace_vector из диапазона (public member function of std::inplace_vector<T,N>)
|
(C++26) |
создаёт hive из диапазона (public member function of std::hive<T,Allocator>)
|
(C++23) |
создаёт deque из диапазона (public member function of std::deque<T,Allocator>)
|
(C++23) |
создаёт forward_list из диапазона (public member function of std::forward_list<T,Allocator>)
|
(C++23) |
создаёт list из диапазона (public member function of std::list<T,Allocator>)
|
(C++23) |
создаёт set из диапазона (public member function of std::set<Key,Compare,Allocator>)
|
(C++23) |
создаёт map из диапазона (public member function of std::map<Key,T,Compare,Allocator>)
|
(C++23) |
создаёт multiset из диапазона (public member function of std::multiset<Key,Compare,Allocator>)
|
(C++23) |
создаёт multimap из диапазона (public member function of std::multimap<Key,T,Compare,Allocator>)
|
(C++23) |
создаёт unordered_set из диапазона (public member function of std::unordered_set<Key,Hash,KeyEqual,Allocator>)
|
(C++23) |
создаёт unordered_map из диапазона (public member function of std::unordered_map<Key,T,Hash,KeyEqual,Allocator>)
|
(C++23) |
создаёт unordered_multiset из диапазона (public member function of std::unordered_multiset<Key,Hash,KeyEqual,Allocator>)
|
(C++23) |
создаёт unordered_multimap из диапазона (public member function of std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>)
|
(C++23) |
создаёт priority_queue из диапазона (public member function of std::priority_queue<T,Container,Compare>)
|
(C++23) |
создаёт queue из диапазона (public member function of std::queue<T,Container>)
|
(C++23) |
создаёт stack из диапазона (public member function of std::stack<T,Container>)
|
(C++23) |
создаёт flat_set из диапазона (public member function of std::flat_set<Key,Compare,KeyContainer>)
|
(C++23) |
создаёт flat_map из диапазона (public member function of std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>)
|
(C++23) |
создаёт flat_multiset из диапазона (public member function of std::flat_multiset<Key,Compare,KeyContainer>)
|
(C++23) |
создаёт flat_multimap из диапазона (public member function of 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}; // использует конструктор с тегом assert(str == "C++"); #endif }
Смотрите также
|
тег для конструирования на месте
(тег) |
|
|
указывает, что элементы диапазона отсортированы (уникальность не требуется)
(тег) |
|
|
(C++23)
|
указывает, что элементы диапазона отсортированы и уникальны
(тег) |
|
(C++23)
|
создаёт новый объект (не представление) из входного диапазона
(шаблон функции) |