- ranges[meta header]
- concept[meta id-type]
- std::ranges[meta namespace]
- cpp20[meta cpp]
namespace std::ranges {
template<class T>
concept random_access_range = bidirectional_range<T> && random_access_iterator<iterator_t<T>>;
}
- bidirectional_range[link bidirectional_range.md]
- random_access_iterator[link /reference/iterator/random_access_iterator.md]
- iterator_t[link iterator_t.md]
random_access_range
は、イテレータがrandom_access_iterator
であるRangeを表すコンセプトである。
型T
がrandom_access_range
のモデルとなるのは、T
がbidirectional_range
のモデルであり、かつそのイテレータがrandom_access_iterator
のモデルである場合である。
#include <ranges>
#include <list>
#include <set>
#include <vector>
int main()
{
// vectorはrandom_access_range
static_assert(std::ranges::random_access_range<std::vector<int>>);
// listはrandom_access_rangeではない
static_assert(!std::ranges::random_access_range<std::list<int>>);
// setはrandom_access_rangeではない
static_assert(!std::ranges::random_access_range<std::set<int>>);
}
- std::ranges::random_access_range[color ff0000]
- C++20
- Clang: 13.0.0 [mark verified]
- GCC: 10.1.0 [mark verified]
- ICC: ??
- Visual C++: 2019 Update 10 [mark verified]