std::ranges::owning_view
| Определено в заголовочном файле <ranges>
|
||
template< ranges::range R >
requires std::movable<R> && (!/*is-initializer-list*/<R>)
class owning_view
: public ranges::view_interface<owning_view<R>>
|
(начиная с C++20) | |
owning_view — это представление (view), которое обладает уникальным владением диапазоном (range). Оно поддерживает только перемещение и хранит этот 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
(публичная функция-член) |
|
Унаследовано от ranges::view_interface | |
(C++23) |
возвращает константный итератор на начало диапазона (public-функция-элемент класса std::ranges::view_interface<D>)
|
(C++23) |
возвращает ограничитель для константного итератора диапазона (public-функция-элемент класса std::ranges::view_interface<D>)
|
| возвращает, не пусто ли производное представление, только если ranges::empty применимо к нему (public-функция-элемент класса std::ranges::view_interface<D>)
| |
| возвращает первый элемент в производном представлении, если оно удовлетворяет forward_range (public-функция-элемент класса std::ranges::view_interface<D>)
| |
| возвращает последний элемент в производном представлении, только если оно удовлетворяет bidirectional_range и common_range (public-функция-элемент класса std::ranges::view_interface<D>)
| |
возвращает n-й элемент в производном представлении, только если оно удовлетворяет random_access_range (public-функция-элемент класса 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
(псевдоним шаблона) (объект адаптера диапазона) |