Namespaces
Variants

std:: from_range, std:: from_range_t

From cppreference.net
Ranges library
Range adaptors
Определено в заголовочном файле <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 из диапазона
(публичная функция-член std::vector<T,Allocator> )
создаёт inplace_vector из диапазона
(публичная функция-член std::inplace_vector<T,N> )
конструирует hive из диапазона
(публичная функция-член Template:cpp/container/hive/title )
создаёт deque из диапазона
(публичная функция-член std::deque<T,Allocator> )
конструирует forward_list из диапазона
(публичная функция-член std::forward_list<T,Allocator> )
создаёт list из диапазона
(публичная функция-член std::list<T,Allocator> )
создаёт set из диапазона
(публичная функция-член std::set<Key,Compare,Allocator> )
создаёт map из диапазона
(публичная функция-член std::map<Key,T,Compare,Allocator> )
конструирует multiset из диапазона
(публичная функция-член std::multiset<Key,Compare,Allocator> )
конструирует multimap из диапазона
(публичная функция-член std::multimap<Key,T,Compare,Allocator> )
создаёт unordered_set из диапазона
(публичная функция-член std::unordered_set<Key,Hash,KeyEqual,Allocator> )
создаёт unordered_map из диапазона
(публичная функция-член std::unordered_map<Key,T,Hash,KeyEqual,Allocator> )
конструирует unordered_multiset из диапазона
(публичная функция-член std::unordered_multiset<Key,Hash,KeyEqual,Allocator> )
создаёт unordered_multimap из диапазона
(публичная функция-член std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator> )
создаёт priority_queue из диапазона
(публичная функция-член std::priority_queue<T,Container,Compare> )
создаёт queue из диапазона
(публичная функция-член std::queue<T,Container> )
создаёт stack из диапазона
(публичная функция-член std::stack<T,Container> )
создаёт flat_set из диапазона
(публичная функция-член std::flat_set<Key,Compare,KeyContainer> )
создаёт flat_map из диапазона
(публичная функция-член std::flat_map<Key,T,Compare,KeyContainer,MappedContainer> )
создаёт flat_multiset из диапазона
(публичная функция-член std::flat_multiset<Key,Compare,KeyContainer> )
конструирует flat_multimap из диапазона
(публичная функция-член 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)
создаёт новый объект (не представление) из входного диапазона
(шаблон функции)