名稱空間
變體
操作

std::ranges::views::stride, std::ranges::stride_view

來自 cppreference.com
< cpp‎ | ranges
 
 
範圍庫 (Ranges library)
範圍介面卡 (Range adaptors)
 
 
定義於標頭檔案 <ranges>
template< ranges::input_range V >

    requires ranges::view<V>
class stride_view

    : public ranges::view_interface<stride_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。給定子表示式 en,表示式 views::stride(e, n) 表示式等價stride_view(e, n)
n 必須大於 0,否則行為未定義。

stride_view 始終模型 input_range,並且如果適配的 view 型別 V 模型對應的概念,則模型 forward_rangebidirectional_rangerandom_access_range 和/或 sized_rangestride_view<V> 模型 common_range,只要底層檢視 V 模型即可。

目錄

[編輯] 資料成員

成員 描述
V base_ (私有) 底層檢視
(僅用於闡釋的成員物件*)
ranges::range_difference_t<V> stride_ (私有) 大小物件(“步長”)
(僅用於闡釋的成員物件*)

[編輯] 成員函式

構造一個 stride_view
(公共成員函式) [編輯]
(C++23)
返回儲存的步長值
(公開成員函式)
返回底層(適配)檢視的副本
(公共成員函式) [編輯]
返回指向起始的迭代器
(公共成員函式) [編輯]
返回一個迭代器或一個哨兵到末尾
(公共成員函式) [編輯]
返回元素數量,僅當底層(適配的)範圍滿足 sized_range 時提供
(公共成員函式) [編輯]
繼承自 std::ranges::view_interface
返回派生檢視是否為空,僅當它滿足 sized_rangeforward_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_rangecommon_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>> =

    ranges::enable_borrowed_range<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 的元素組成
(類模板) (範圍介面卡物件)[編輯]