Namespaces
Variants

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 тип в своих конструкторах:

Библиотека контейнеров
создаёт vector из диапазона
(public member function of std::vector<T,Allocator>)
создаёт inplace_vector из диапазона
(public member function of std::inplace_vector<T,N>)
создаёт hive из диапазона
(public member function of std::hive<T,Allocator>)
создаёт deque из диапазона
(public member function of std::deque<T,Allocator>)
создаёт forward_list из диапазона
(public member function of std::forward_list<T,Allocator>)
создаёт list из диапазона
(public member function of std::list<T,Allocator>)
создаёт set из диапазона
(public member function of std::set<Key,Compare,Allocator>)
создаёт map из диапазона
(public member function of std::map<Key,T,Compare,Allocator>)
создаёт multiset из диапазона
(public member function of std::multiset<Key,Compare,Allocator>)
создаёт multimap из диапазона
(public member function of std::multimap<Key,T,Compare,Allocator>)
создаёт unordered_set из диапазона
(public member function of std::unordered_set<Key,Hash,KeyEqual,Allocator>)
создаёт unordered_map из диапазона
(public member function of std::unordered_map<Key,T,Hash,KeyEqual,Allocator>)
создаёт unordered_multiset из диапазона
(public member function of std::unordered_multiset<Key,Hash,KeyEqual,Allocator>)
создаёт unordered_multimap из диапазона
(public member function of std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>)
создаёт priority_queue из диапазона
(public member function of std::priority_queue<T,Container,Compare>)
создаёт queue из диапазона
(public member function of std::queue<T,Container>)
создаёт stack из диапазона
(public member function of std::stack<T,Container>)
создаёт flat_set из диапазона
(public member function of std::flat_set<Key,Compare,KeyContainer>)
создаёт flat_map из диапазона
(public member function of std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>)
создаёт flat_multiset из диапазона
(public member function of std::flat_multiset<Key,Compare,KeyContainer>)
создаёт flat_multimap из диапазона
(public member function of std::flat_multimap<Key,T,Compare,KeyContainer,MappedContainer>)
Библиотека строк
конструирует 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)
создаёт новый объект (не представление) из входного диапазона
(шаблон функции)