Files
2025-10-25 03:02:53 +03:00

54 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[range.req.general]
# 25 Ranges library [[ranges]](./#ranges)
## 25.4 Range requirements [[range.req]](range.req#general)
### 25.4.1 General [range.req.general]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L1287)
Ranges are an abstraction that allows a C++ program
to operate on elements of data structures uniformly[.](#1.sentence-1)
Calling ranges::begin on a range returns an object
whose type models [input_or_output_iterator](iterator.concept.iterator#concept:input_or_output_iterator "24.3.4.6Concept input_­or_­output_­iterator[iterator.concept.iterator]") ([[iterator.concept.iterator]](iterator.concept.iterator "24.3.4.6Concept input_­or_­output_­iterator"))[.](#1.sentence-2)
Calling ranges::end on a range returns an object whose type S,
together with the type I of the object returned by ranges::begin,
models [sentinel_for](iterator.concept.sentinel#concept:sentinel_for "24.3.4.7Concept sentinel_­for[iterator.concept.sentinel]")<S, I>[.](#1.sentence-3)
The library formalizes the interfaces, semantics, and complexity of ranges
to enable algorithms and range adaptors that work efficiently
on different types of sequences[.](#1.sentence-4)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L1299)
The [range](range.range#concept:range "25.4.2Ranges[range.range]") concept requires thatranges::begin and ranges::end return an iterator and a sentinel, respectively[.](#2.sentence-1)
The [sized_range](range.sized#concept:sized_range "25.4.4Sized ranges[range.sized]") concept refines [range](range.range#concept:range "25.4.2Ranges[range.range]") with
the requirement that ranges::size be amortized O(1)[.](#2.sentence-2)
The [view](range.view#concept:view "25.4.5Views[range.view]") concept specifies requirements on
a [range](range.range#concept:range "25.4.2Ranges[range.range]") type to provide operations with predictable complexity[.](#2.sentence-3)
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L1308)
Several refinements of [range](range.range#concept:range "25.4.2Ranges[range.range]") group requirements
that arise frequently in concepts and algorithms[.](#3.sentence-1)
Common ranges are ranges for whichranges::begin and ranges::end return objects of the same type[.](#3.sentence-2)
Random access ranges are ranges for which ranges::begin returns a type that models[random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]") ([[iterator.concept.random.access]](iterator.concept.random.access "24.3.4.13Concept random_­access_­iterator"))[.](#3.sentence-3)
(Contiguous, bidirectional, forward, input, and output ranges
are defined similarly[.](#3.sentence-4))
Viewable ranges can be converted to views[.](#3.sentence-5)