std::ranges::get(std::ranges::subrange)
С сайта ru.cppreference.net
| Определён в заголовке <ranges>
|
||
template< std::size_t N, class I, class S, ranges::subrange_kind K >
requires ((N == 0 && std::copyable<I>) || N == 1)
constexpr auto get( const ranges::subrange<I, S, K>& r );
|
(1) | (начиная с C++20) |
template< std::size_t N, class I, class S, ranges::subrange_kind K >
requires (N < 2)
constexpr auto get( ranges::subrange<I, S, K>&& r );
|
(2) | (начиная с C++20) |
namespace std { using ranges::get; }
|
(3) | (начиная с C++20) |
Обеспечивает поддержку структурированных привязок.
1) Извлекает итератор или часовой из
subrange lvalue (или const rvalue), когда N == 0 или N == 1, соответственно.2) То же, что и (1), за исключением того, что принимает неконстантное
subrange rvalue.3) Перегрузки (1,2) импортируются в пространство имён
std, что упрощает их использование и делает каждый subrange с копируемым итератором типом, подобным паре.Параметры
| r | - |
a
subrange
|
Возвращаемое значение
1,2)
Если
N
равно
0
, возвращает
r.
begin
(
)
. В противном случае (
N
равно
1
), возвращает
r.
end
(
)
.
Пример
Запустить этот код
#include <array> #include <iostream> #include <iterator> #include <ranges> int main() { std::array a{1, -2, 3, -4}; std::ranges::subrange sub_a{std::next(a.begin()), std::prev(a.end())}; std::cout << *std::ranges::get<0>(sub_a) << ' ' // == *(begin(a) + 1) << *std::ranges::get<1>(sub_a) << '\n'; // == *(end(a) - 1) *std::get<0>(sub_a) = 42; // OK // *std::get<2>(sub_a) = 13; // Error: index can only be 0 or 1 }
Вывод:
-2 -4
Отчеты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3589 | C++20 |
overload
(
1
)
copies
begin_
if
N
is
0
, but
I
might not model
copyable
|
added constraints |
Смотрите также
| Structured binding (C++17) | связывает указанные имена с подобъектами или элементами кортежа инициализатора |
|
(C++11)
|
доступ к указанному элементу кортежа
(function template) |
|
(C++11)
|
доступ к элементу
pair
(function template) |
|
(C++11)
|
доступ к элементу
array
(function template) |
|
(C++17)
|
читает значение варианта по индексу или типу (если тип уникален), генерирует исключение при ошибке
(function template) |
|
(C++26)
|
получает ссылку на действительную или мнимую часть из
std::complex
(function template) |