std::ranges::take_view<V>::begin
来自 cppreference.com
constexpr auto begin() requires (!/*simple-view*/<V>); |
(1) | (自 C++20 起) |
constexpr auto begin() const requires ranges::range<const V>; |
(2) | (自 C++20 起) |
返回指向 take_view
的第一个元素的迭代器。
如果 V
是 简单视图(即,如果 V
和 const V
是具有相同迭代器和哨兵类型的视图),则重载 (1) 不参与重载解析。
内容 |
[编辑] 参数
(无)
[编辑] 返回值
结果取决于可能被 const 限定的基础视图类型 Base
所满足的概念,对于 (1) 来说是 V
,对于 (2) 来说是 const V
。
令 base_
为基础视图,count_
为基础计数器(如果 take_view
是默认初始化的,则等于 0)。
基础视图类型 满足 ... |
random_access_range
| ||
---|---|---|---|
是 | 否 | ||
sized_range
|
是 | ranges::begin(base_) | std::counted_iterator(ranges::begin(base_), ranges::range_difference_t<Base_>(this->size())) |
否 | std::counted_iterator(ranges::begin(base_), count_) |
[编辑] 示例
运行此代码
#include <concepts> #include <forward_list> #include <iostream> #include <ranges> #include <string_view> #include <type_traits> using namespace std::literals; int main() { { static constexpr auto v = {"∀x"sv, "∃y"sv, "ε"sv, "δ"sv}; auto view = std::ranges::take_view(v, 8); auto iter = view.begin(); std::cout << *iter << '\n'; static_assert( std::ranges::sized_range<decltype(v)> and std::ranges::random_access_range<decltype(v)> and std::is_same_v<decltype(iter), decltype(std::ranges::begin(v))> ); } { std::forward_list v = {"Ax"sv, "Ey"sv, "p"sv, "q"sv}; auto view = std::ranges::take_view(v, 8); auto iter = view.begin(); std::cout << *iter << '\n'; static_assert( not std::ranges::sized_range<decltype(v)> and not std::ranges::random_access_range<decltype(v)> and std::is_same_v<decltype(iter), std::counted_iterator< std::forward_list<std::string_view>::iterator>> ); } }
输出
∀x Ax
[编辑] 缺陷报告
以下行为变更缺陷报告被追溯地应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
P2393R1 | C++20 | 有符号和无符号整数类型之间的隐式转换可能会失败 | 已明确 |
[编辑] 另请参阅
返回指向末尾的迭代器或哨兵 (公共成员函数) | |
(C++20) |
跟踪范围末尾距离的迭代器适配器 (类模板) |
(C++20) |
将哨兵与从 take_view::begin 返回的迭代器进行比较 (函数) |