std::ranges::views::repeat, std::ranges::repeat_view
Определено в заголовочном файле <ranges> | ||
|---|---|---|
template< std::move_constructible W,
std::semiregular Bound = std::unreachable_sentinel_t >
requires (std::is_object_v<W> && std::same_as<W, std::remove_cv_t<W>> &&
(/*is-integer-like*/<Bound> ||
std::same_as<Bound, std::unreachable_sentinel_t>))
class repeat_view : public ranges::view_interface<repeat_view<W, Bound>>
| (1) | (с C++23) |
namespace views {
inline constexpr /*unspecified*/ repeat = /*unspecified*/;
}
| (2) | (с C++23) |
| Подпись вызова | ||
template< class W >
requires /* see below */
constexpr /* see below */ repeat( W&& value );
| (с C++23) | |
template< class W, class Bound >
requires /* see below */
constexpr /* see below */ repeat( W&& value, Bound&& bound );
| (с C++23) |
views::repeat(e) и views::repeat(e, f) эквивалентны с точки зрения выражений (имеют тот же эффект, что и) repeat_view(e) и repeat_view(e, f) соответственно для любых подходящих подвыражений e и f.Объекты точек кастомизации
Имя views::repeat обозначает объект точки кастомизации, который является константным объектом-функцией литерального semiregular типа класса. Для наглядности, неквалифицированная версия его типа обозначается как __repeat_fn.
Все экземпляры __repeat_fn равны. Эффекты вызова разных экземпляров типа __repeat_fn с одними и теми же аргументами эквивалентны, независимо от того, является ли выражение, обозначающее экземпляр, lvalue или rvalue, и квалифицирован ли он как const (однако, экземпляр с квалификатором volatile не обязан быть вызываемым). Таким образом, views::repeat может быть свободно скопирован, а его копии могут быть использованы взаимозаменяемо.
Учитывая набор типов Args..., если std::declval<Args>()... удовлетворяют требованиям аргументов к views::repeat выше, __repeat_fn моделирует
-
std::invocable<__repeat_fn, Args...>, -
std::invocable<const __repeat_fn, Args...>, -
std::invocable<__repeat_fn&, Args...>, и -
std::invocable<const __repeat_fn&, Args...>.
В противном случае, ни один оператор вызова функции __repeat_fn не участвует в разрешении перегрузки.
Члены данных
| Название члена | Определение |
|---|---|
value_ (private) | Начальное значение оборачиваемого типа movable-box<W>.(экспозиционный-только член-объект*) |
bound_ (private) | Значение сторожевого элемента типа Bound.(экспозиционный-только член-объект*) |
Члены-функции
создаёт repeat_view (публичная функция-член) |
|
получает итератор начала диапазона repeat_view (публичная функция-член) |
|
получает сторожевой элемент, обозначающий конец диапазона repeat_view (публичная функция-член) |
|
получает размер диапазона repeat_view, если он размеченный (публичная функция-член) |
|
Наследуется от |
|
|
(C++20) | возвращает, пуст ли производный диапазон. Предоставляется, если он удовлетворяет sized_range или forward_range. (публичная функция-член std::ranges::view_interface<D>) |
|
(C++23) | возвращает константный итератор начала диапазона. (публичная функция-член std::ranges::view_interface<D>) |
|
(C++23) | возвращает сторожевой элемент для константного итератора диапазона. (публичная функция-член std::ranges::view_interface<D>) |
|
(C++20) | возвращает, не пуст ли производный диапазон. Предоставляется, если ranges::empty применимо к нему. (публичная функция-член std::ranges::view_interface<D>) |
|
(C++20) | возвращает первый элемент в производном диапазоне. Предоставляется, если он удовлетворяет forward_range. (публичная функция-член std::ranges::view_interface<D>) |
|
(C++20) | возвращает последний элемент в производном диапазоне. Предоставляется, если он удовлетворяет bidirectional_range и common_range. (публичная функция-член std::ranges::view_interface<D>) |
|
(C++20) | возвращает n-й элемент в производном диапазоне. Предоставляется, если он удовлетворяет random_access_range. (публичная функция-член std::ranges::view_interface<D>) |
std::ranges::repeat_view::repeat_view
repeat_view() requires std::default_initializable<W> = default; | (1) | (с C++23) |
constexpr explicit repeat_view( const W& value, Bound bound = Bound() ); | (2) | (с C++23) |
constexpr explicit repeat_view( W&& value, Bound bound = Bound() ); | (3) | (с C++23) |
template < class... WArgs, class... BoundArgs >
requires std::constructible_from<W, WArgs...>
&& std::constructible_from<Bound, BoundArgs...>
constexpr explicit repeat( std::piecewise_construct_t,
std::tuple<WArgs...> value_args,
std::tuple<BoundArgs...> bound_args = std::tuple<>{} );
| (4) | (с C++23) |
value_ и bound_ инициализируются с помощью их инициализаторов по умолчанию (= W() и = Bound()).value_ инициализируется значением value, а bound_ - значением bound . Поведение не определено, если Bound не является std::unreachable_sentinel_t, а bool(bound >= 0) - false.value_ инициализируется значением std::move(value), а bound_ - значением bound . Поведение не определено, если Bound не является std::unreachable_sentinel_t, а bool(bound >= 0) - false.value_ и bound_ инициализируются с помощью кусочной инициализации.Параметры
| value | - | значение, которое будет многократно воспроизводиться |
| bound | - | граница |
std::ranges::repeat_view::begin
constexpr /*iterator*/ begin() const; | (с C++23) |
Возвращает итератор, инициализированный std::addressof(*value_).
std::ranges::repeat_view::end
constexpr /*iterator*/ end() const
requires (!std::same_as<Bound, std::unreachable_sentinel_t>);
| (1) | (since C++23) |
constexpr std::unreachable_sentinel_t end() const; | (2) | (since C++23) |
std::unreachable_sentinel. std::ranges::repeat_view::size
constexpr auto size() const
requires (!std::same_as<Bound, std::unreachable_sentinel_t>);
| (since C++23) |
Возвращает размер представления, если представление ограничено. Эквивалентно return /*to-unsigned-like*/(bound_);.
Шаблон функции только для демонстрации to-unsigned-like преобразует свой аргумент (который должен быть целочисленного типа) в соответствующую беззнаковую версию типа аргумента.
Правила вывода типов
template< class W, class Bound > repeat_view( W, Bound ) -> repeat_view<W, Bound>; | (since C++23) |
Вложенные классы
|
(C++23) | тип итератора (член класса только для демонстрации*) |
Примечания
Если Bound не std::unreachable_sentinel_t, то repeat_view моделирует sized_range и common_range.
| Макросы проверки наличия функций | Значение | Std | Функция |
|---|---|---|---|
__cpp_lib_ranges_repeat | 202207L | (C++23) |
std::ranges::repeat_view |
Пример
#include <iostream>
#include <ranges>
#include <string_view>
using namespace std::literals;
int main()
{
// bounded overload
for (auto s : std::views::repeat("C++"sv, 3))
std::cout << s << ' ';
std::cout << '\n';
// unbounded overload
for (auto s : std::views::repeat("I know that you know that"sv)
| std::views::take(3))
std::cout << s << ' ';
std::cout << "...\n";
}Вывод:
C++ C++ C++ I know that you know that I know that you know that I know that you know that ...
См. также
|
(C++20) | представление, состоящее из последовательности, генерируемой повторным инкрементированием начального значения (шаблон класса) (объект точек настройки) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/repeat_view