std::ranges:: owning_view
|
Определено в заголовочном файле
<ranges>
|
||
|
template
<
ranges::
range
R
>
requires
std::
movable
<
R
>
&&
(
!
/*is-initializer-list*/
<
R
>
)
|
(начиная с C++20) | |
owning_view
— это
view
, который обладает уникальным владением
range
. Он является перемещаемым (move-only) и хранит этот
range
внутри себя.
Константа /*is-initializer-list*/ < R > в requires условии имеет значение true тогда и только тогда, когда std:: remove_cvref_t < R > является специализацией std::initializer_list .
Члены данных
| Участник | Описание |
R
r_
|
базовый диапазон
( объект-член только для демонстрации* ) |
Функции-члены
конструирует
owning_view
инициализацией значением или перемещающим конструктором сохранённого диапазона
(публичная функция-член) |
|
|
перемещающее присваивание сохранённого диапазона
(публичная функция-член) |
|
|
возвращает ссылку на сохранённый диапазон
(публичная функция-член) |
|
|
возвращает начальный итератор сохранённого диапазона
(публичная функция-член) |
|
|
возвращает страж сохранённого диапазона
(публичная функция-член) |
|
|
проверяет, является ли сохранённый диапазон пустым
(публичная функция-член) |
|
возвращает размер сохранённого
sized_range
(публичная функция-член) |
|
|
(C++26)
|
возвращает приблизительный размер сохранённого
approximately_sized_range
(публичная функция-член) |
возвращает указатель на начало сохранённого
contiguous_range
(публичная функция-член) |
|
Наследуется от std::ranges::view_interface |
|
|
(C++23)
|
возвращает константный итератор на начало диапазона
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
(C++23)
|
возвращает страж для константного итератора диапазона
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
возвращает, является ли производное представление непустым, предоставляется только если
ranges::empty
применимо к нему
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
возвращает первый элемент в производном представлении, предоставляется если оно удовлетворяет
forward_range
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
возвращает последний элемент в производном представлении, предоставляется только если оно удовлетворяет
bidirectional_range
и
common_range
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
возвращает
n
-й
элемент в производном представлении, предоставляется только если оно удовлетворяет
random_access_range
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
std::ranges::owning_view:: owning_view
|
owning_view
(
)
requires
std::
default_initializable
<
R
>
=
default
;
|
(1) | (since C++20) |
|
owning_view
(
owning_view
&&
other
)
=
default
;
|
(2) | (since C++20) |
|
constexpr
owning_view
(
R
&&
t
)
;
|
(3) | (since C++20) |
r_
с помощью инициализатора члена по умолчанию (
=
R
(
)
).
Параметры
| other | - |
другой
owning_view
для перемещения
|
| t | - | диапазон для перемещения |
Примечания
owning_view
не определяет явно конструктор копирования.
owning_view
является только перемещаемым.
std::ranges::owning_view:: operator=
|
owning_view
&
operator
=
(
owning_view
&&
other
)
=
default
;
|
(since C++20) | |
Оператор перемещающего присваивания. Перемещает значение
r_
из
other
.
Параметры
| other | - |
другой
owning_view
для перемещения
|
Возвращаемое значение
* this
Примечания
owning_view
не определяет явно оператор копирующего присваивания.
owning_view
является перемещаемым (move-only).
std::ranges::owning_view:: base
|
constexpr
R
&
base
(
)
&
noexcept
;
|
(1) | (since C++20) |
|
constexpr
const
R
&
base
(
)
const
&
noexcept
;
|
(2) | (since C++20) |
|
constexpr
R
&&
base
(
)
&&
noexcept
;
|
(3) | (since C++20) |
|
constexpr
const
R
&&
base
(
)
const
&&
noexcept
;
|
(4) | (since C++20) |
Возвращает ссылку на хранимый диапазон, сохраняя категорию значения и константную квалификацию.
Возвращаемое значение
r_
r_
)
std::ranges::owning_view:: begin
|
constexpr
ranges::
iterator_t
<
R
>
begin
(
)
;
|
(1) | (since C++20) |
|
constexpr
auto
begin
(
)
const
requires
ranges::
range
<
const
R
>
;
|
(2) | (since C++20) |
Возвращает
ranges::
begin
(
r_
)
.
std::ranges::owning_view:: end
|
constexpr
ranges::
sentinel_t
<
R
>
end
(
)
;
|
(1) | (since C++20) |
|
constexpr
auto
end
(
)
const
requires
ranges::
range
<
const
R
>
;
|
(2) | (since C++20) |
Возвращает
ranges::
end
(
r_
)
.
std::ranges::owning_view:: empty
|
constexpr
bool
empty
(
)
requires requires
{
ranges::
empty
(
r_
)
;
}
;
|
(1) | (начиная с C++20) |
|
constexpr
bool
empty
(
)
const
requires requires
{
ranges::
empty
(
r_
)
;
}
;
|
(2) | (начиная с C++20) |
Возвращает
ranges::
empty
(
r_
)
.
std::ranges::owning_view:: size
|
constexpr
auto
size
(
)
requires
ranges::
sized_range
<
R
>
;
|
(1) | (since C++20) |
|
constexpr
auto
size
(
)
const
requires
ranges::
sized_range
<
const
R
>
;
|
(2) | (since C++20) |
Возвращает
ranges::
size
(
r_
)
.
std::ranges::owning_view:: reserve_hint
|
constexpr
auto
reserve_hint
(
)
requires ranges :: approximately_sized_range < R > ; |
(1) | (since C++26) |
|
constexpr
auto
reserve_hint
(
)
const
requires ranges :: approximately_sized_range < const R > ; |
(2) | (since C++26) |
Возвращает
ranges
::
reserve_hint
(
r_
)
.
std::ranges::owning_view:: data
|
constexpr
auto
data
(
)
requires
ranges::
contiguous_range
<
R
>
;
|
(1) | (since C++20) |
|
constexpr
auto
data
(
)
const
requires
ranges::
contiguous_range
<
const
R
>
;
|
(2) | (since C++20) |
Возвращает
ranges::
data
(
r_
)
.
Вспомогательные шаблоны
|
template
<
class
T
>
constexpr
bool
enable_borrowed_range
<
std
::
ranges
::
owning_view
<
T
>>
=
|
(начиная с C++20) | |
Эта специализация
ranges::
enable_borrowed_range
позволяет
owning_view
удовлетворять требованиям
borrowed_range
, когда базовый диапазон удовлетворяет им.
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_ranges_reserve_hint
|
202502L
|
(C++26) |
ranges::approximately_sized_range
и
reserve_hint
|
Пример
#include <cassert> #include <iostream> #include <ranges> #include <string> int main() { using namespace std::literals; std::ranges::owning_view ov{"cosmos"s}; // выведенный тип R - std::string; // "ov" является единственным владельцем этой строки assert( ov.empty() == false && ov.size() == 6 && ov.size() == ov.base().size() && ov.front() == 'c' && ov.front() == *ov.begin() && ov.back() == 's' && ov.back() == *(ov.end() - 1) && ov.data() == ov.base() ); std::cout << "sizeof(ov): " << sizeof ov << '\n' // обычно равно sizeof(R) << "range-for: "; for (const char ch : ov) std::cout << ch; std::cout << '\n'; std::ranges::owning_view<std::string> ov2; assert(ov2.empty()); // ov2 = ov; // ошибка компиляции: оператор копирующего присваивания удален ov2 = std::move(ov); // OK assert(ov2.size() == 6); }
Возможный вывод:
sizeof(ov): 32 range-for: cosmos
Смотрите также
|
(C++20)
|
представление
view
элементов другого
range
(шаблон класса) |
|
(C++20)
|
представление
view
, которое включает все элементы
range
(псевдоним шаблона) (объект адаптера диапазона) |