std::ranges::views::stride, std::ranges::stride_view
來自 cppreference.com
定義於標頭檔案 <ranges> |
||
template< ranges::input_range V > requires ranges::view<V> |
(1) | (C++23 起) |
namespace views { inline constexpr /* unspecified */ stride = /* unspecified */; |
(2) | (C++23 起) |
呼叫簽名 (Call signature) |
||
template< ranges::viewable_range R > constexpr ranges::view auto stride( R&& r, ranges::range_difference_t<R> n ); |
(C++23 起) | |
template< class DifferenceType > constexpr /*range adaptor closure*/ stride( DifferenceType&& n ); |
(C++23 起) | |
幫助模板 |
||
1)
stride_view
是一個範圍介面卡,它接受一個 view
和一個數字 n
,並生成一個檢視,該檢視由原始檢視的元素組成,每次前進 n 個元素。這意味著生成檢視的第 m
個元素是原始檢視的第 (n * i)
個元素,其中 i
是某個非負索引。原始檢視中,“索引”不是 n
倍數的元素不會出現在生成的檢視中。 令
S
為原始檢視的大小。則生成檢視的大小為- (S / n) + (S % n ? 1 : 0),如果 S >= n;否則,
- 1,如果 S > 0;否則,
- 0,且生成的檢視為空。
2) 名稱 views::stride 表示一個 RangeAdaptorObject。給定子表示式 e 和 n,表示式 views::stride(e, n) 表示式等價於 stride_view(e, n)。
n
必須大於 0,否則行為未定義。stride_view
始終模型 input_range
,並且如果適配的 view
型別 V 模型對應的概念,則模型 forward_range
、bidirectional_range
、random_access_range
和/或 sized_range
。stride_view<V> 模型 common_range
,只要底層檢視 V 模型即可。
目錄 |
[編輯] 資料成員
成員 | 描述 |
V base_ (私有) |
底層檢視 (僅用於闡釋的成員物件*) |
ranges::range_difference_t<V> stride_ (私有) |
大小物件(“步長”) (僅用於闡釋的成員物件*) |
[編輯] 成員函式
構造一個 stride_view (公共成員函式) | |
(C++23) |
返回儲存的步長值 (公開成員函式) |
返回底層(適配)檢視的副本 (公共成員函式) | |
返回指向起始的迭代器 (公共成員函式) | |
返回一個迭代器或一個哨兵到末尾 (公共成員函式) | |
返回元素數量,僅當底層(適配的)範圍滿足 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> 的公共成員函式) | |
返回派生檢視中的第一個元素,如果它滿足 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> 的公共成員函式) |
[編輯] 推導指南
[編輯] 巢狀類
(C++23) |
迭代器型別 (僅用於說明的成員類模板*) |
[編輯] 幫助模板
template< class V > constexpr bool ranges::enable_borrowed_range<stride_view<V>> = |
(C++23 起) | |
此 ranges::enable_borrowed_range 特化使 stride_view
在底層檢視滿足時,也滿足 borrowed_range
。
[編輯] 注意
特性測試宏 | 值 | 標準 | 特性 |
---|---|---|---|
__cpp_lib_ranges_stride |
202207L |
(C++23) | std::ranges::stride_view
|
[編輯] 示例
執行此程式碼
#include <algorithm> #include <iostream> #include <ranges> #include <string_view> using namespace std::literals; void print(std::ranges::viewable_range auto&& v, std::string_view separator = " ") { for (auto const& x : v) std::cout << x << separator; std::cout << '\n'; } int main() { print(std::views::iota(1, 13) | std::views::stride(3)); print(std::views::iota(1, 13) | std::views::stride(3) | std::views::reverse); print(std::views::iota(1, 13) | std::views::reverse | std::views::stride(3)); print("0x0!133713337*x//42/A$@"sv | std::views::stride(0B11) | std::views::transform([](char O) -> char { return 0100 | O; }), ""); }
輸出
1 4 7 10 10 7 4 1 12 9 6 3 password
[編輯] 參考
- C++23 標準 (ISO/IEC 14882:2024)
- 26.7.31 Stride view [range.stride]
[編輯] 另請參閱
一個 view ,其第 M 個元素是另一個 view 的第 M 個到第 (M + N - 1) 個元素的 view (類模板) (範圍介面卡物件) | |
一個 view 的範圍,它是另一個 view 元素的 N 大小的非重疊連續塊(類模板) (範圍介面卡物件) | |
一個 view ,由適配檢視相鄰元素的引用元組組成(類模板) (範圍介面卡物件) | |
一個 view ,由滿足謂詞的 range 的元素組成(類模板) (範圍介面卡物件) |