只有一个元素的视图。 此视图适用于测试调用需要与包含至少一个元素的视图一起提供的代码。
语法
template<std::copy_constructible T>
requires std::is_object_v<T>
class single_view : public ranges::view_interface<single_view<T>>
模板参数
T
元素的类型。
视图特征
有关下列条目的说明,请参阅视图类特征
| 特征 | 说明 |
|---|---|
| 范围适配器 | views::single |
| 基础范围 | 无 |
| 元素类型 | 创建 single_view 时指定 |
| 视图枚举器类别 | contiguous_range |
| 已设置大小 | 始终返回 1 |
是 const 可迭代 |
是 |
| 常见范围 | 是 |
| 借入范围 | 否 |
成员
| 成员函数 | 描述 |
|---|---|
| 构造函数C++20 | 构造 single_view。 |
beginC++20 |
获取元素的迭代器。 |
dataC++20 |
获取指向元素的指针。 |
endC++20 |
获取视图末尾的 sentinel。 |
sizeC++20 |
获取元素数。 始终返回 1。 |
从 view_interface 继承 |
描述 |
backC++20 |
获取元素。 |
emptyC++20 |
测试视图是否为空(始终返回 false)。 |
frontC++20 |
获取元素。 |
operator[]C++20 |
获取位于指定位置的元素(只有位置 0 有效)。 |
operator boolC++20 |
测试视图是否不为空(始终返回 false)。 |
注解
创建 single_view 的最佳方法是使用 views::single 范围适配器。 范围适配器是创建视图类的预期方法。 如果要创建自己的自定义视图类型,会公开视图类型。
除非模板值为 const,否则可以修改 single_view 中的值。 例如:single_view<const float> sv{3.14} // this value can't be modified because it's const。
要求
标头: <ranges> (自C++20以来)
命名空间:std::ranges
编译器选项:/std:c++20或更高版本是必需的。
构造函数
创建 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);
参数
t
元素值。
有关模板参数类型的信息,请参阅模板参数。
注解
创建 single_view 的最佳方法是使用 views::single 范围适配器。
1) 使用默认构造的指定类型的单个元素创建 single_view。 例如, single_view<float> sv{} 使用默认构造为 0.0 的 float 类型单个元素创建 single_view。
2) 使用从指定参数进行复制初始化的指定类型的单个元素创建 single_view。 例如, single_view<myObjectType> sv{myObject} 使用从参数进行复制初始化的 myObjectType 类型单个元素创建 single_view。
3) 使用从参数进行移动初始化的指定类型的单个元素创建 single_view。
4) 使用通过 (std::forward<Args>(args)...)进行初始化的指定类型的单个元素创建 single_view。
示例 single_view
/// requires /std:c++20 or later
#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
获取指向视图中单个元素的指针。
constexpr T* begin() noexcept;
constexpr const T* begin() const noexcept;
参数
无。
返回值
指向 single_view 内单个元素的指针。
data
获取指向 single_view 中单个元素的指针。
constexpr T* data() noexcept;
constexpr const T* data() const noexcept;
参数
无。
返回值
指向 single_view 中元素的指针。
end
获取指向元素后面的 sentinel 的指针。
constexpr T* end() noexcept;
constexpr const T* end() const noexcept;
参数
无。
返回值
指向紧跟元素的 sentinel 的指针。
size
获取视图中的元素数。 始终返回 1。
static constexpr size_t size() noexcept;
参数
无。
返回值
1