drop_while_view 类(C++ 标准库)

一个视图,其中包含删除与谓词匹配的前导元素后,范围中仍保留的元素。

语法

template<ranges::view V, class P>
    requires ranges::input_range<V> &&
             std::is_object_v<P> &&
             std::indirect_unary_predicate<const P, ranges::iterator_t<V>>
class drop_while_view : public ranges::view_interface<drop_while_view<V, P>>;

模板参数

V
基础视图的类型。

P
谓词的类型,用于确定要删除的前导元素。

视图特征

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

特征 说明
范围适配器 views::drop_while
基础范围 必须满足 forward_range 及更高版本的要求,并且基础范围的迭代器必须为 sized_sentinel_for 建模
元素类型 与基础范围相同
视图迭代器类别 与基础范围相同
已设置大小 仅当基础范围满足 random_access_range 要求时
const 可迭代
常见范围 仅当基础范围满足 common_range 要求时
借入范围 仅当基础范围满足 borrowed_range 要求时

成员

成员函数 描述
构造函数 构造视图。
base 获取基础视图。
begin 获取指向第一个元素的迭代器。
end 获取视图末尾的 sentinel。
pred 获取对确定要删除哪些元素的谓词的引用。
继承自 view_interface 描述
backC++20 获取最后一个元素。
dataC++20 获取指向第一个元素的指针。
emptyC++20 测试视图是否为空。
frontC++20 获取第一个元素。
operator[]C++20 获取指定位置的元素。
operator boolC++20 测试视图是否不为空。
size 获取视图中的元素数。

要求

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

命名空间std::ranges

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

构造函数

构造 drop_while_view 的实例。

1) constexpr drop_while_view(V base, P pred);
2) drop_while_view() requires default_initializable<V> && default_initializable<P> = default;

参数

base
基础范围。

pred
用于确定要删除的前导元素的谓词。

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

返回值

一个 drop_while_view 实例。

注解

创建 drop_while_view 的最佳方法是使用 views::drop_while 范围适配器。 范围适配器是创建视图类的预期方法。 如果要创建自己的自定义视图类型,会公开视图类型。

1) 对根据 base 视图和 pred 谓词构造 drop_while_view 进行移动。 通过 std::move() 移动 basepred
2) 默认构造 drop_while_view

示例: drop_while_view

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

void print(auto v)
{
    for (auto& x : v)
    {
        std::cout << x << ' ';
    }
    std::cout << '\n';
}

int main()
{
    std::vector<int> v{ 0, 1, 2, 3, -4, 5, 6 };
    auto myView = std::views::drop_while(
        v,
        [](int i) {return i >= 0; });
    print(myView); // -4 5 6

    auto myView2 = v | std::views::drop_while(
        [](int i) {return i < 5; });
    print(myView2); // 5 6
}
-4 5 6
5 6

base

获取基础视图。

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

// Uses std::move() to return the underlying view
constexpr V base() &&;

参数

无。

返回

基础视图。

begin

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

constexpr auto begin();

返回值

指向视图中第一个元素的迭代器。 如果视图没有谓词,则没有定义行为。

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

end

获取视图末尾的 sentinel。

constexpr auto end()

返回值

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

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

pred

获取对确定要删除哪些前导元素的谓词的引用。

constexpr const Pred& pred() const;

返回值

对谓词的引用。

注解

如果视图不存储谓词,则没有定义行为。

示例 pred

// 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 mv = v | std::views::drop_while(
        [](int i) {return i < 5; }); // drop the leading elements < 5
    std::cout << std::boolalpha << mv.pred()(v[6]); // outputs "false" because v[6] = 6 and 6 is not less than 5 (the predicate)
}
false

另请参阅

<ranges>
drop_while 范围适配器
take_while 范围适配器
take_while_view
视图类