take_view 类(C++ 标准库)

另一个视图中前 N 个元素的视图。

语法

template<view V>
class take_view : public view_interface<take_view<V>>;

模板参数

V
基础范围的类型。

视图特征

有关下列条目的说明,请参阅视图类特征

特征 说明
范围适配器 views::take
基础范围 任何范围
元素类型 与基础范围相同
视图迭代器类别 与基础范围相同
已设置大小
const 可迭代 仅当基础范围为 const 可迭代时
常见范围 仅当基础范围满足 random_access_rangesized_range
借入范围 仅当基础范围为 borrowed_range

成员

成员函数 描述
构造函数 构造视图。
baseC++20 获取基础范围。
beginC++20 获取指向第一个元素的迭代器。
endC++20 获取视图末尾的 sentinel。
sizeC++20 获取元素数。 基础范围必须满足 sized_range
view_interface 继承 描述
backC++20 获取最后一个元素。
dataC++20 获取指向第一个元素的指针。
emptyC++20 测试视图是否为空。
frontC++20 获取第一个元素。
operator[]C++20 获取指定位置的元素。
operator boolC++20 测试视图是否不为空。

要求

标头: <ranges> (自C++20以来)

命名空间std::ranges

编译器选项:/std:c++20或更高版本是必需的。

构造函数

构造 take_view 的实例

1) take_view() requires default_initializable<V> = default;
2) constexpr take_view(V base, range_difference_t<V> count);

参数

base
基础视图。

count
要从基础视图前部获取的元素数。 如果 count 超出基础视图中的元素数,则该视图将包含基础范围中的所有元素。

有关模板参数类型的信息,请参阅模板参数

返回值

take_view,它是另一个视图中前 N 个元素的视图。 如果指定要删除的元素多于基础范围中的元素,则会返回 empty_view

注解

创建 take_view 的最佳方法是使用 views::take 范围适配器。 范围适配器是创建视图类的预期方法。 仅当要创建自己的自定义视图类型时,才会公开视图类型。

1) 创建没有元素的 take_view。 基础视图是默认构造的。 base() 返回 V() 的副本。
2) 从 base 和计数创建 take_viewbase 通过 std::move() 移动。

如果 count 小于基础范围中的元素数,则 count 决定了 take_view 的大小。
如果 count 大于基础范围中的元素数,则 take_view 包括基础范围中的所有元素。

示例: take_view

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{0, 1, 2, 3, 4, 5, 6};
   
    auto newView = std::views::take(v, 3);
    
    for (auto& e : newView)
    {
        std::cout << e << ' '; // 0 1 2
    }
    std::cout << '\n';

    // Use the '|' operator to create a take_view
    for (auto i : v | std::views::take(3))
    {
        std::cout << i << ' '; // 0 1 2
    }
}
0 1 2
0 1 2

base

获取基础视图的副本。

// Uses a copy constructor to return the underlying view
1) constexpr V base() const & requires std::copy_constructible<V>;

// Uses a move constructor to return the underlying view
2) constexpr V base() &&;

参数

无。

返回值

基础视图。

begin

获取指向视图中第一个元素的迭代器。

constexpr auto begin() requires (!Simple_view<V>);
constexpr auto begin() const requires range<const V>;

参数

无。

返回值

指向视图中第一个元素的迭代器。

包含元素 10、20 和 30 的矢量的图片。第一个元素包含 10,被标记为 begin()。最后一个元素包含 30,被标记为“last element”。最后一个元素之后的虚框指示 sentinel,被标记为 end()。

注解

对于 1,Simple_view<V> 要求意味着视图 Vconst V 必须具有相同的迭代器和 sentinel 类型。

end

获取视图末尾的 sentinel。

1) constexpr auto end() requires !(Simple_view<V>);
2) constexpr auto end() const requires range<const V>;

参数

无。

返回值

视图中最后一个元素后面的 sentinel。

包含元素 10、20 和 30 的矢量的图片。第一个元素包含 10,被标记为 begin()。最后一个元素包含 30,被标记为“last element”。最后一个元素之后的虚框指示 sentinel,被标记为 end()。

注解

对于 1,Simple_view<V> 要求意味着视图 Vconst V 必须具有相同的迭代器和 sentinel 类型。

size

获取元素数。

constexpr auto size() requires sized_range<V>;
constexpr auto size() const requires sized_range<const V>;

参数

无。

返回值

take_view 中的元素的数量。
如果使用显式 count 构造 take_view

  • 如果 count 小于基础范围中的元素数,则它会被返回为视图的大小。
  • 如果 count 大于基础范围中的元素数,则视图的大小为 ranges::size(base)

另请参阅

<ranges>
take 范围适配器
视图类