std::ranges::views::to_input, std::ranges::to_input_view
來自 cppreference.com
定義於標頭檔案 <ranges> |
||
template< ranges::input_range V > requires ranges::view<V> |
(1) | (C++26 起) |
namespace views { inline constexpr /* unspecified */ to_input = /* unspecified */; |
(2) | (C++26 起) |
呼叫簽名 (Call signature) |
||
template< ranges::viewable_range R > requires /* 見下文 */ |
(C++26 起) | |
2) 範圍介面卡物件 (RangeAdaptorObject)。令 e 為子表示式,令 T 為 decltype(e)。那麼表示式 views::to_input(e) 在以下所有條件為真且表示式格式正確時,與
- views::all(e) 表示式等價:
-
T
滿足input_range
, -
T
不滿足common_range
,且 -
T
不滿足forward_range
。
-
- 否則,與 to_input_view{e} 表示式等價。
因此,to_input_view
從不滿足比 input_range
更強的範圍概念。特別是,它不滿足以下所有概念:
此外,to_input_view
不滿足 common_range
。然而,當底層檢視 V
滿足相應概念時,它滿足 borrowed_range
、constant_range
和 sized_range
。
目錄 |
[編輯] 資料成員
成員 | 描述 |
V base_ (私有) |
底層檢視 (僅用於闡釋的成員物件*) |
[編輯] 成員函式
構造一個 to_input_view (公開成員函式) | |
返回底層(適配)檢視的副本 (公開成員函式) | |
返回指向起始的迭代器 (公開成員函式) | |
返回一個迭代器或一個哨兵到末尾 (公開成員函式) | |
返回元素數量。僅當底層(被適配的)範圍滿足 sized_range 時提供。(公開成員函式) | |
繼承自 std::ranges::view_interface | |
返回派生檢視是否為空,僅當它滿足 sized_range 或 forward_range 時提供( std::ranges::view_interface<D> 的公共成員函式) | |
(C++23) |
返回範圍開頭的常量迭代器 ( std::ranges::view_interface<D> 的公共成員函式) |
(C++23) |
返回範圍常量迭代器的哨兵 ( std::ranges::view_interface<D> 的公共成員函式) |
返回派生檢視是否非空,僅當 ranges::empty 適用於它時提供 ( std::ranges::view_interface<D> 的公共成員函式) | |
獲取派生檢視資料地址,僅當其迭代器型別滿足 contiguous_iterator 時提供( std::ranges::view_interface<D> 的公共成員函式) | |
返回派生檢視中的第一個元素,如果它滿足 forward_range 則提供( std::ranges::view_interface<D> 的公共成員函式) | |
返回派生檢視中的最後一個元素,僅當它滿足 bidirectional_range 和 common_range 時提供( std::ranges::view_interface<D> 的公共成員函式) | |
返回派生檢視中的第 n 個元素,僅當它滿足 random_access_range 時提供( std::ranges::view_interface<D> 的公共成員函式) |
std::ranges::to_input_view::to_input_view
to_input_view() requires std::default_initializable<V> = default; |
(1) | (C++26 起) |
constexpr explicit to_input_view( V base ); |
(2) | (C++26 起) |
1) 透過其預設成員初始化器 (= V()) 對
base_
進行值初始化。2) 用 std::move(base) 初始化
base_
。引數
base | - | 一個檢視 |
std::ranges::to_input_view::base
constexpr V base() const& requires std::copy_constructible<V>; |
(1) | (C++26 起) |
constexpr V base() &&; |
(2) | (C++26 起) |
1) 從底層檢視複製構造結果。等價於 return base_;。
2) 從底層檢視移動構造結果。等價於 return std::move(base_);。
std::ranges::to_input_view::begin
constexpr auto begin() requires (!__simple_view<V>); |
(1) | (C++26 起) |
constexpr auto begin() const requires ranges::range<const V>; |
(2) | (C++26 起) |
1) 等價於 return /*iterator*/<false>(ranges::begin(base_));
2) 等價於 return /*iterator*/<true>(ranges::begin(base_));
std::ranges::to_input_view::end
constexpr auto end() requires (!__simple_view<V>); |
(1) | (C++26 起) |
constexpr auto end() const requires ranges::range<const V>; |
(2) | (C++26 起) |
1,2) 等價於 return ranges::end(base_);
std::ranges::to_input_view::size
constexpr auto size() requires ranges::sized_range<V>; |
(1) | (C++26 起) |
constexpr auto size() const requires ranges::sized_range<const V>; |
(2) | (C++26 起) |
1,2) 等價於 return ranges::size(base_);
[編輯] 推導指引
template< class R > to_input_view( R&& ) -> to_input_view<views::all_t<R>>; |
(C++26 起) | |
[編輯] 巢狀類
迭代器型別 (僅用於說明的成員類模板*) |
[編輯] 輔助模板
template< class T > constexpr bool enable_borrowed_range<std::ranges::to_input_view<T>> = |
(C++26 起) | |
此 std::ranges::enable_borrowed_range 的特化使得當底層檢視滿足 borrowed_range
時,to_input_view
也滿足它。
[編輯] 注意
to_input_view
可用於避免為支援更強迭代器強度所需操作而產生的開銷。
特性測試宏 | 值 | 標準 | 特性 |
---|---|---|---|
__cpp_lib_ranges_to_input |
202502L |
(C++26) | std::ranges::to_input_view
|
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 參閱
(C++20) |
指定其迭代器型別滿足 input_iterator 的範圍(概念) |
將 view 轉換為 common_range (類模板) (範圍介面卡物件) |