std::ranges::drop_view<V>::begin
来自 cppreference.com
constexpr auto begin() requires (!(/*simple-view*/<V> && |
(1) | (自 C++20 起) |
constexpr auto begin() const requires ranges::random_access_range<const V> && |
(2) | (自 C++20 起) |
返回指向 drop_view
的第一个元素的迭代器,也就是指向基础视图的第 Nth 个元素的迭代器,或者如果基础视图少于 N 个元素,则指向基础视图的末尾的迭代器。
如果 V
不是 random_access_range
或 sized_range
,为了提供 range
概念所需的摊销常数时间复杂度,重载 (1) 会将结果缓存到 drop_view
对象中,以便在后续调用时使用。
内容 |
[编辑] 参数
(无)
[编辑] 返回值
ranges::next(ranges::begin(base_), count_, ranges::end(base_)), 其中 base_
是基础视图,count_
是要跳过的元素数量。
[编辑] 示例
运行此代码
#include <array> #include <concepts> #include <iostream> #include <iterator> #include <ranges> void println(std::ranges::range auto const& range) { for (auto const& elem : range) std::cout << elem; std::cout << '\n'; } int main() { std::array hi{'H', 'e', 'l', 'l', 'o', ',', ' ', 'C', '+', '+', '2', '0', '!'}; println(hi); const auto pos = std::distance(hi.begin(), std::ranges::find(hi, 'C')); auto cxx = std::ranges::drop_view{hi, pos}; std::cout << "*drop_view::begin() == '" << *cxx.begin() << "'\n"; // *cxx.begin() = 'c'; // undefined: 'views' are to be used as observers println(cxx); }
输出
Hello, C++20! *drop_view::begin() == 'C' C++20!
[编辑] 缺陷报告
以下行为更改缺陷报告被追溯应用到先前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
LWG 3482 | C++20 | const 重载可以用非大小范围调用 | const 重载需要 sized_range |
[编辑] 参见
返回指向末尾的迭代器或哨兵 (公共成员函数) | |
(C++20) |
返回指向范围开头的迭代器 (定制点对象) |
(C++20) |
返回一个指示范围末尾的哨兵 (定制点对象) |