Namespaces
Variants

std::ranges:: views:: drop, std::ranges:: drop_view

From cppreference.net
Ranges library
Range adaptors
ヘッダーで定義 <ranges>
template < ranges:: view V >

class drop_view

: public ranges:: view_interface < drop_view < V >>
(1) (C++20以降)
namespace views {

inline constexpr /* 未規定 */ drop = /* 未規定 */ ;

}
(2) (C++20以降)
呼び出しシグネチャ
template < ranges:: viewable_range R >

requires /* 下記参照 */
constexpr ranges:: view auto

drop ( R && r, ranges:: range_difference_t < R > count ) ;
(C++20以降)
template < class DifferenceType >
constexpr /* レンジアダプタクロージャ */ drop ( DifferenceType && count ) ;
(C++20以降)
1) 基となるシーケンスの要素からなる範囲アダプタで、最初の N 個の要素をスキップするもの。
2) RangeAdaptorObject **翻訳結果:** RangeAdaptorObject **説明:** - HTMLタグと属性はそのまま保持されています - ` `タグ内のテキスト「RangeAdaptorObject」はC++固有の用語であるため、翻訳対象外として保持されています - 書式設定(フォントファミリー、イタリックスタイル)も完全に保持されています . Given T is std:: remove_cvref_t < decltype ( ( e ) ) > and D is ranges:: range_difference_t < decltype ( ( e ) ) > ), the expression views :: drop ( e, f ) is expression-equivalent to:
  • std:: span < typename T :: element_type > 、もし T std:: span の特殊化である場合;
  • T それ以外の場合;
  • views:: repeat ( * e. value_ , ranges:: distance ( e ) - inc ) 、ただし T sized_range をモデル化する場合。この場合 e は一度だけ評価される;
  • ( ( void ) e, auto ( f ) ) それ以外の場合、ただし e f の評価は不定順序で行われる;
(C++23以降)
  • それ以外の場合、 drop_view ( e, f )
In all cases, decltype ( ( f ) ) must model std:: convertible_to < D > **翻訳結果:** std:: convertible_to < D > **説明:** - HTMLタグ、属性はすべて保持されています - C++の専門用語(`std::convertible_to`)は翻訳されていません - テンプレート構文(` `)はそのまま保持されています - コード要素として認識されるため、内容は変更されていません .

drop_view は、基となるビュー V がそれぞれのコンセプトをモデル化する場合、 contiguous_range random_access_range bidirectional_range forward_range input_range common_range 、および sized_range のコンセプトをモデル化します。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳 - C++固有の用語(Data members、Member functions、std::ranges::view_interfaceなど)は翻訳せず保持 - HTMLタグ、属性、クラス名は完全に保持 - 番号付けや構造は元のまま維持 - 技術文書としての正確性と専門性を保つ翻訳

データメンバ

メンバー 説明
V base_ (private) 基となるビュー
( 説明専用メンバーオブジェクト* )
ranges:: range_difference_t < V > count_ (private) スキップする要素数
( 説明専用メンバーオブジェクト* )
non-propagating-cache < ranges:: iterator_t < V >> cache_ (private)
( V forward_range を満たすが random_access_range sized_range を満たさない場合にのみ存在)
begin() の呼び出し結果をキャッシュするオブジェクト
( 説明専用メンバーオブジェクト* )

メンバー関数

drop_view を構築する
(public member function)
基盤となる(アダプトされた)ビューのコピーを返す
(public member function)
先頭を指すイテレータを返す
(public member function)
終端を指すイテレータまたはセンチネルを返す
(public member function)
要素数を返す(基盤となる(アダプトされた)範囲が sized_range を満たす場合にのみ提供)
(public member function)
結果の approximately_sized_range の近似サイズを返す
(public member function)
std::ranges::view_interface から継承
派生ビューが空かどうかを返す( sized_range または forward_range を満たす場合にのみ提供)
( std::ranges::view_interface<D> のpublic member function)
(C++23)
範囲の先頭を指す定数イテレータを返す
( std::ranges::view_interface<D> のpublic member function)
(C++23)
範囲の定数イテレータのセンチネルを返す
( std::ranges::view_interface<D> のpublic member function)
派生ビューが空でないかどうかを返す( ranges::empty が適用可能な場合にのみ提供)
( std::ranges::view_interface<D> のpublic member function)
派生ビューのデータのアドレスを取得する(そのイテレータ型が contiguous_iterator を満たす場合にのみ提供)
( std::ranges::view_interface<D> のpublic member function)
派生ビューの最初の要素を返す( forward_range を満たす場合に提供)
( std::ranges::view_interface<D> のpublic member function)
派生ビューの最後の要素を返す( bidirectional_range かつ common_range を満たす場合にのみ提供)
( std::ranges::view_interface<D> のpublic member function)
派生ビューの n th 番目の要素を返す( random_access_range を満たす場合にのみ提供)
( std::ranges::view_interface<D> のpublic member function)

推論ガイド

ヘルパーテンプレート

template < class T >

constexpr bool enable_borrowed_range < std :: ranges :: drop_view < T >> =

ranges:: enable_borrowed_range < T > ;
(C++20以降)

この ranges::enable_borrowed_range の特殊化は、基盤となるビューが borrowed_range を満たす場合に、 drop_view がそれを満たすようにする。

#include <initializer_list>
#include <iostream>
#include <ranges>
int main()
{
    const auto nums = {1, 2, 3, 4, 5, 6, 7};
    std::cout << "drop " << 2 << ": ";
    for (int i : std::ranges::drop_view{nums, 2})
        std::cout << i << ' ';
    std::cout << '\n';
    std::cout << "drop " << 3 << ": ";
    for (int i : nums | std::views::drop(3))
        std::cout << i << ' ';
    std::cout << '\n';
    std::cout << "drop " << 4 << ": ";
    for (int i : std::views::iota(1, 8) | std::views::drop(4))
        std::cout << i << ' ';
    std::cout << '\n';
    // 要素数よりも多くの要素をドロップしても問題ありません:
    for (int dp : {5, 6, 7, 890, 100500})
    {
        std::cout << "drop " << dp << ": ";
        for (int i : std::views::iota(1, 8) | std::views::drop(dp))
            std::cout << i << ' ';
        std::cout << '\n';
    }
}

出力:

drop 2: 3 4 5 6 7
drop 3: 4 5 6 7
drop 4: 5 6 7
drop 5: 6 7
drop 6: 7
drop 7:
drop 890: 
drop 100500:

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 3407 C++20 views::drop がサイズ指定可能なランダムアクセス範囲の
構築に失敗することがある
構築方法を調整し、
常に有効となるようにした
LWG 3494 C++20 drop_view borrowed_range ではなかった 基盤となるビューが borrowed_range の場合、
それも borrowed_range となる

関連項目

別の view の要素から構成される view 。述語が false を返す最初の要素までの初期部分列をスキップする
(クラステンプレート) (レンジアダプタオブジェクト)