single_view class (C++ Standard Library)

A view that has only one element. This view is useful for test purposes for calling code that needs to be provided with a view with at least one element in it.

Syntax

template<std::copy_constructible T>
  requires std::is_object_v<T>
class single_view : public ranges::view_interface<single_view<T>>

Template parameters

T
The type of the element.

View characteristics

For a description of the following entries, see View class characteristics

Characteristic Description
Range adaptor views::single
Underlying range None
Element type Specified when the single_view is created
View iterator category contiguous_range
Sized Always returns 1
Is const-iterable Yes
Common range Yes
Borrowed range No

Members

Member functions Description
ConstructorsC++20 Construct a single_view.
begin C++20 Get an iterator to the element.
dataC++20 Get a pointer to the element.
endC++20 Get the sentinel at the end of the view.
sizeC++20 Get the number of elements. Always returns 1.
Inherited from view_interface Description
backC++20 Get the element.
emptyC++20 Test whether the view is empty (always returns false).
frontC++20 Get the element.
operator[]C++20 Get the element at the specified position (only position 0 is valid).
operator boolC++20 Test whether the view isn't empty (always returns false).

Remarks

The best way to create a single_view is by using the views::single range adaptor. Range adaptors are the intended way to create view classes. The view types are exposed in case you want to create your own custom view type.

The value in the single_view can be modified unless the template value is const. For example: single_view<const float> sv{3.14} // this value can't be modified because it's const.

Requirements

Header: <ranges> (since C++20)

Namespace: std::ranges

Compiler Option: /std:c++20 or later is required.

Constructors

Create an instance of a single_view.

1) single_view() = default;
2) constexpr explicit single_view(const T& t);
3) constexpr explicit single_view(T&& t);
4) template<class... Args>
        requires constructible_from<T, Args...>
    constexpr single_view(in_place_t, Args&&... args);

Parameters

t
The element value.

For information about the template parameter type, see Template parameters.

Remarks

The best way to create a single_view is by using the views::single range adaptor.

1) Create a single_view with a single element of the specified type that is default constructed. For example, single_view<float> sv{} creates a single_view with a single element of type float that is default constructed to 0.0.
2) Create a single_view with a single element of the specified type that is copy-initialized from the specified argument. For example, single_view<myObjectType> sv{myObject} creates a single_view with a single element of type myObjectType that is copy-initialized from the argument.
3) Create a single_view with a single element of the specified type that is move-initialized from the argument.
4) Create a single_view with a single element of the specified type initialized with (std::forward<Args>(args)...).

Example single_view

/// requires /std:c++20 or higher
#include <ranges>
#include <iostream>
#include <string>
#include <tuple>

int main()
{
    std::ranges::single_view<int> sv{7};
    std::cout << sv.front() << " " << *sv.data() << "\n"; // 7 7

    std::ranges::single_view<std::tuple<int, std::string>> sv2{{6502, "8-bit"}};
    std::cout << std::get<0>(sv2[0]) << " " << std::get<1>(sv2[0]) << "\n"; // 6502 8-bit
}
7 7
6502 8-bit

begin

Get a pointer to the single element in the view.

constexpr T* begin() noexcept;
constexpr const T* begin() const noexcept;

Parameters

None.

Return value

A pointer to the single element inside the single_view.

data

Get a pointer to the single element in the single_view.

constexpr T* data() noexcept;
constexpr const T* data() const noexcept;

Parameters

None.

Return value

A pointer to the element in the single_view.

end

Gets a pointer to the sentinel after the element.

constexpr T* end() noexcept;
constexpr const T* end() const noexcept;

Parameters

None.

Return value

A pointer to the sentinel that follows the element.

size

Get the number of elements in the view. Always returns 1.

static constexpr size_t size() noexcept;

Parameters

None.

Return value

1

See also

<ranges>
single range adaptor
empty_view
View classes