Skip to content

Latest commit

 

History

History
58 lines (48 loc) · 1.79 KB

bidirectional_range.md

File metadata and controls

58 lines (48 loc) · 1.79 KB

bidirectional_range

  • ranges[meta header]
  • concept[meta id-type]
  • std::ranges[meta namespace]
  • cpp20[meta cpp]
namespace std::ranges {
  template<class T>
  concept bidirectional_range = forward_range<T> && bidirectional_iterator<iterator_t<T>>;
}
  • forward_range[link forward_range.md]
  • bidirectional_iterator[link /reference/iterator/bidirectional_iterator.md]
  • iterator_t[link iterator_t.md]

概要

bidirectional_rangeは、イテレータがbidirectional_iteratorであるRangeを表すコンセプトである。

モデル

Tbidirectional_rangeのモデルとなるのは、Tforward_rangeのモデルであり、かつそのイテレータがbidirectional_iteratorのモデルである場合である。

#include <ranges>
#include <forward_list>
#include <list>

int main() {
  using namespace std;
  // listはbidirectional_range
  static_assert(ranges::bidirectional_range<list<int>>);

  // forward_listはbidirectional_rangeではなく、forward_range
  static_assert(!ranges::bidirectional_range<forward_list<int>>);
  static_assert(ranges::forward_range<forward_list<int>>);
}
  • ranges::bidirectional_range[color ff0000]
  • ranges::forward_range[link forward_range.md]

出力

バージョン

言語

  • C++20

処理系

  • Clang: 13.0.0 [mark verified]
  • GCC: 10.1.0 [mark verified]
  • ICC: ??
  • Visual C++: 2019 Update 10 [mark verified]

参照