BSI PD ISO/IEC TS 21425:2017:2018 Edition
$215.11
Programming languages. C++ Extensions for ranges
Published By | Publication Date | Number of Pages |
BSI | 2018 | 166 |
[intro.scope]
This document describes extensions to the C++ Programming Language (2) that permit operations on ranges of data. These extensions include changes and additions to the existing library facilities as well as the extension of one core language facility. In particular, changes and extensions to the Standard Library include:
-
The formulation of the foundational and iterator concept requirements using the syntax of the Concepts TS (2 ).
-
Analogues of the Standard Library algorithms specified in terms of the new concepts.
-
The loosening of the algorithm constraints to permit the use of sentinels to denote the end of a range and corresponding changes to algorithm return types where necessary.
-
The addition of new concepts describing range and view abstractions; that is, objects with a begin iterator and an end sentinel.
-
New algorithm overloads that take range objects.
-
Support of callable objects (as opposed to function objects) passed as arguments to the algorithms.
-
The addition of optional projection arguments to the algorithms to permit on-the-fly data transformations.
-
Analogues of the iterator primitives and new primitives in support of the addition of sentinels to the library.
-
Constrained analogues of the standard iterator adaptors and stream iterators that satisfy the new iterator concepts.
-
New iterator adaptors (counted_iterator and common_iterator) and sentinels (unreachable).
Changes to the core language include:
-
the extension of the range-based for statement to support the new iterator range requirements (10.4).
This document does not specify constrained analogues of other parts of the Standard Library (e.g., the numeric algorithms), nor does it add range support to all the places that could benefit from it (e.g., the containers).
This document does not specify any new range views, actions, or facade or adaptor utilities; all are left as future work.
PDF Catalog
PDF Pages | PDF Title |
---|---|
2 | National foreword |
3 | 70910.pdf |
5 | Contents |
7 | Foreword |
8 | 1 Scope 2 Normative references 3 Terms and definitions |
9 | 4 General principles 4.1 Implementation compliance 4.2 Namespaces, headers, and modifications to standard classes |
10 | 5 Statements 5.1 Iteration statements 5.1.1 The range-based for statement |
11 | 6 Library introduction 6.1 General 6.2 Method of description (Informative) |
12 | 6.2.1 Structure of each clause 6.2.1.1 Elements 6.2.1.2 Summary 6.2.1.3 Requirements |
13 | 6.2.1.4 Detailed specifications 6.2.2 Other conventions 6.2.2.1 Functions within classes 6.2.2.2 Private members 6.3 Library-wide requirements 6.3.1 Library contents and organization 6.3.1.1 Library contents 6.3.2 Headers 6.3.3 Using the library 6.3.3.1 Overview 6.3.3.2 Headers |
14 | 6.3.3.3 Linkage 6.3.4 Constraints on programs 6.3.4.1 Overview 6.3.4.2 Derived classes 6.3.4.3 Other functions 6.3.4.4 Function arguments 6.3.4.5 Library object access 6.3.4.6 Requires paragraph 6.3.4.7 Semantic requirements 6.3.5 Conforming implementations 6.3.5.1 Customization Point Objects |
15 | 7 Concepts library 7.1 General 7.1.1 Equality Preservation |
16 | 7.2 Header <experimental/ranges/concepts> synopsis |
18 | 7.3 Core language concepts 7.3.1 General 7.3.2 Concept Same 7.3.3 Concept DerivedFrom |
19 | 7.3.4 Concept ConvertibleTo 7.3.5 Concept CommonReference 7.3.6 Concept Common |
20 | 7.3.7 Concept Integral 7.3.8 Concept SignedIntegral 7.3.9 Concept UnsignedIntegral 7.3.10 Concept Assignable |
21 | 7.3.11 Concept Swappable |
22 | 7.3.12 Concept Destructible 7.3.13 Concept Constructible 7.3.14 Concept DefaultConstructible 7.3.15 Concept MoveConstructible |
23 | 7.3.16 Concept CopyConstructible 7.4 Comparison concepts 7.4.1 General 7.4.2 Concept Boolean |
24 | 7.4.3 Concept EqualityComparable 7.4.4 Concept StrictTotallyOrdered |
25 | 7.5 Object concepts |
26 | 7.5.1 Concept Movable 7.5.2 Concept Copyable 7.5.3 Concept Semiregular 7.5.4 Concept Regular 7.6 Callable concepts 7.6.1 General 7.6.2 Concept Invocable 7.6.3 Concept RegularInvocable |
27 | 7.6.4 Concept Predicate 7.6.5 Concept Relation 7.6.6 Concept StrictWeakOrder |
28 | 8 General utilities library 8.1 General 8.2 Utility components |
29 | 8.2.1 swap 8.2.2 exchange 8.3 Function objects |
30 | 8.3.1 Function template invoke 8.3.2 Comparisons |
33 | 8.3.3 Class identity 8.4 Metaprogramming and type traits 8.4.1 Header <experimental/ranges/type_traits> synopsis 8.4.2 Type properties |
34 | 8.4.3 Other transformations |
37 | 8.5 Tagged tuple-like types 8.5.1 General 8.5.2 Class template tagged |
39 | 8.5.3 Tuple-like access to tagged |
40 | 8.5.4 Alias template tagged_pair 8.5.4.1 Tagged pair creation functions 8.5.5 Alias template tagged_tuple |
41 | 8.5.5.1 Tagged tuple creation functions 9 Iterators library 9.1 General 9.2 Header <experimental/ranges/iterator> synopsis |
49 | 9.3 Iterator requirements 9.3.1 General |
50 | 9.3.2 Customization points 9.3.2.1 iter_move 9.3.2.2 iter_swap |
51 | 9.3.3 Iterator associated types 9.3.3.1 difference_type 9.3.3.2 value_type |
52 | 9.3.3.3 iterator_category |
53 | 9.3.4 Concept Readable 9.3.5 Concept Writable |
54 | 9.3.6 Concept WeaklyIncrementable 9.3.7 Concept Incrementable 9.3.8 Concept Iterator |
55 | 9.3.9 Concept Sentinel 9.3.10 Concept SizedSentinel 9.3.11 Concept InputIterator |
56 | 9.3.12 Concept OutputIterator 9.3.13 Concept ForwardIterator 9.3.14 Concept BidirectionalIterator |
57 | 9.3.15 Concept RandomAccessIterator 9.4 Indirect callable requirements 9.4.1 General |
58 | 9.4.2 Indirect callables |
59 | 9.4.3 Class template projected 9.5 Common algorithm requirements 9.5.1 General 9.5.2 Concept IndirectlyMovable 9.5.3 Concept IndirectlyCopyable |
60 | 9.5.4 Concept IndirectlySwappable 9.5.5 Concept IndirectlyComparable 9.5.6 Concept Permutable 9.5.7 Concept Mergeable |
61 | 9.5.8 Concept Sortable 9.6 Iterator primitives 9.6.1 Iterator traits |
62 | 9.6.2 Standard iterator traits |
63 | 9.6.3 Standard iterator tags 9.6.4 Iterator operations |
65 | 9.7 Iterator adaptors 9.7.1 Reverse iterators 9.7.1.1 Class template reverse_iterator |
67 | 9.7.1.2 reverse_iterator operations 9.7.1.2.1 reverse_iterator constructor 9.7.1.2.2 reverse_iterator::operator= 9.7.1.2.3 Conversion 9.7.1.2.4 operator* 9.7.1.2.5 operator-> |
68 | 9.7.1.2.6 operator++ 9.7.1.2.7 operator– 9.7.1.2.8 operator+ 9.7.1.2.9 operator+= 9.7.1.2.10 operator- 9.7.1.2.11 operator-= |
69 | 9.7.1.2.12 operator[] 9.7.1.2.13 operator== 9.7.1.2.14 operator!= 9.7.1.2.15 operator< 9.7.1.2.16 operator> 9.7.1.2.17 operator>= 9.7.1.2.18 operator<= |
70 | 9.7.1.2.19 operator- 9.7.1.2.20 operator+ 9.7.1.2.21 iter_move 9.7.1.2.22 iter_swap 9.7.1.2.23 Non-member function make_reverse_iterator() 9.7.2 Insert iterators |
71 | 9.7.2.1 Class template back_insert_iterator 9.7.2.2 back_insert_iterator operations 9.7.2.2.1 back_insert_iterator constructor 9.7.2.2.2 back_insert_iterator::operator= 9.7.2.2.3 back_insert_iterator::operator* |
72 | 9.7.2.2.4 back_insert_iterator::operator++ 9.7.2.2.5 back_inserter 9.7.2.3 Class template front_insert_iterator 9.7.2.4 front_insert_iterator operations 9.7.2.4.1 front_insert_iterator constructor 9.7.2.4.2 front_insert_iterator::operator= |
73 | 9.7.2.4.3 front_insert_iterator::operator* 9.7.2.4.4 front_insert_iterator::operator++ 9.7.2.4.5 front_inserter 9.7.2.5 Class template insert_iterator 9.7.2.6 insert_iterator operations 9.7.2.6.1 insert_iterator constructor |
74 | 9.7.2.6.2 insert_iterator::operator= 9.7.2.6.3 insert_iterator::operator* 9.7.2.6.4 insert_iterator::operator++ 9.7.2.6.5 inserter 9.7.3 Move iterators and sentinels 9.7.3.1 Class template move_iterator |
76 | 9.7.3.2 move_iterator operations 9.7.3.2.1 move_iterator constructors 9.7.3.2.2 move_iterator::operator= 9.7.3.2.3 move_iterator conversion 9.7.3.2.4 move_iterator::operator* 9.7.3.2.5 move_iterator::operator++ |
77 | 9.7.3.2.6 move_iterator::operator– 9.7.3.2.7 move_iterator::operator+ 9.7.3.2.8 move_iterator::operator+= 9.7.3.2.9 move_iterator::operator- 9.7.3.2.10 move_iterator::operator-= 9.7.3.2.11 move_iterator::operator[] |
78 | 9.7.3.2.12 move_iterator comparisons 9.7.3.2.13 move_iterator non-member functions |
79 | 9.7.3.3 Class template move_sentinel |
80 | 9.7.3.4 move_sentinel operations 9.7.3.4.1 move_sentinel constructors 9.7.3.4.2 move_sentinel::operator= 9.7.3.4.3 move_sentinel comparisons |
81 | 9.7.3.4.4 move_sentinel non-member functions 9.7.4 Common iterators 9.7.4.1 Class template common_iterator |
82 | 9.7.4.2 common_iterator operations 9.7.4.2.1 common_iterator constructors |
83 | 9.7.4.2.2 common_iterator::operator= 9.7.4.2.3 common_iterator::operator* 9.7.4.2.4 common_iterator::operator-> |
84 | 9.7.4.2.5 common_iterator::operator++ 9.7.4.2.6 common_iterator comparisons |
85 | 9.7.4.2.7 iter_move 9.7.4.2.8 iter_swap 9.7.5 Default sentinels 9.7.5.1 Class default_sentinel 9.7.6 Counted iterators 9.7.6.1 Class template counted_iterator |
87 | 9.7.6.2 counted_iterator operations 9.7.6.2.1 counted_iterator constructors |
88 | 9.7.6.2.2 counted_iterator::operator= 9.7.6.2.3 counted_iterator conversion 9.7.6.2.4 counted_iterator count 9.7.6.2.5 counted_iterator::operator* 9.7.6.2.6 counted_iterator::operator++ |
89 | 9.7.6.2.7 counted_iterator::operator– 9.7.6.2.8 counted_iterator::operator+ 9.7.6.2.9 counted_iterator::operator+= 9.7.6.2.10 counted_iterator::operator- 9.7.6.2.11 counted_iterator::operator-= |
90 | 9.7.6.2.12 counted_iterator::operator[] 9.7.6.2.13 counted_iterator comparisons |
91 | 9.7.6.2.14 counted_iterator non-member functions |
92 | 9.7.7 Dangling wrapper 9.7.7.1 Class template dangling 9.7.7.2 dangling operations 9.7.7.2.1 dangling constructors 9.7.7.2.2 dangling::get_unsafe 9.7.8 Unreachable sentinel 9.7.8.1 Class unreachable |
93 | 9.7.8.2 unreachable operations 9.7.8.2.1 operator== 9.7.8.2.2 operator!= 9.8 Stream iterators 9.8.1 Class template istream_iterator |
94 | 9.8.1.1 istream_iterator constructors and destructor |
95 | 9.8.1.2 istream_iterator operations |
96 | 9.8.2 Class template ostream_iterator 9.8.2.1 ostream_iterator constructors and destructor |
97 | 9.8.2.2 ostream_iterator operations 9.8.3 Class template istreambuf_iterator |
98 | 9.8.3.1 Class template istreambuf_iterator::proxy 9.8.3.2 istreambuf_iterator constructors |
99 | 9.8.3.3 istreambuf_iterator::operator* 9.8.3.4 istreambuf_iterator::operator++ 9.8.3.5 istreambuf_iterator::equal 9.8.3.6 operator== 9.8.3.7 operator!= |
100 | 9.8.4 Class template ostreambuf_iterator 9.8.4.1 ostreambuf_iterator constructors 9.8.4.2 ostreambuf_iterator operations |
101 | 10 Ranges library 10.1 General 10.2 decay_copy 10.3 Header <experimental/ranges/range> synopsis |
102 | 10.4 Range access 10.4.1 begin |
103 | 10.4.2 end 10.4.3 cbegin 10.4.4 cend 10.4.5 rbegin |
104 | 10.4.6 rend 10.4.7 crbegin 10.4.8 crend 10.5 Range primitives 10.5.1 size |
105 | 10.5.2 empty 10.5.3 data 10.5.4 cdata 10.6 Range requirements 10.6.1 General |
106 | 10.6.2 Ranges 10.6.3 Sized ranges |
107 | 10.6.4 Views 10.6.5 Bounded ranges 10.6.6 Input ranges |
108 | 10.6.7 Output ranges 10.6.8 Forward ranges 10.6.9 Bidirectional ranges 10.6.10 Random access ranges 11 Algorithms library 11.1 General |
124 | 11.2 Tag specifiers |
125 | 11.3 Non-modifying sequence operations 11.3.1 All of 11.3.2 Any of 11.3.3 None of |
126 | 11.3.4 For each 11.3.5 Find |
127 | 11.3.6 Find end 11.3.7 Find first of 11.3.8 Adjacent find |
128 | 11.3.9 Count 11.3.10 Mismatch |
129 | 11.3.11 Equal 11.3.12 Is permutation 11.3.13 Search |
130 | 11.4 Mutating sequence operations 11.4.1 Copy |
132 | 11.4.2 Move 11.4.3 swap |
133 | 11.4.4 Transform 11.4.5 Replace |
135 | 11.4.6 Fill 11.4.7 Generate 11.4.8 Remove |
136 | 11.4.9 Unique |
137 | 11.4.10 Reverse |
138 | 11.4.11 Rotate 11.4.12 Shuffle |
139 | 11.4.13 Partitions |
140 | 11.5 Sorting and related operations |
141 | 11.5.1 Sorting 11.5.1.1 sort 11.5.1.2 stable_sort 11.5.1.3 partial_sort |
142 | 11.5.1.4 partial_sort_copy 11.5.1.5 is_sorted 11.5.2 Nth element |
143 | 11.5.3 Binary search 11.5.3.1 lower_bound 11.5.3.2 upper_bound |
144 | 11.5.3.3 equal_range 11.5.3.4 binary_search 11.5.4 Merge |
145 | 11.5.5 Set operations on sorted structures 11.5.5.1 includes |
146 | 11.5.5.2 set_union 11.5.5.3 set_intersection |
147 | 11.5.5.4 set_difference 11.5.5.5 set_symmetric_difference |
148 | 11.5.6 Heap operations 11.5.6.1 push_heap 11.5.6.2 pop_heap 11.5.6.3 make_heap |
149 | 11.5.6.4 sort_heap 11.5.6.5 is_heap 11.5.7 Minimum and maximum |
152 | 11.5.8 Lexicographical comparison 11.5.9 Permutation generators |
153 | 12 Numerics library 12.1 Uniform random number generator requirements |
154 | A Compatibility features A.1 General A.2 Rvalue range access A.3 Range-and-a-half algorithms |
156 | B Acknowledgements |
157 | C Compatibility C.1 C++ and Ranges C.1.1 Algorithm Return Types C.1.2 Stronger Constraints C.1.3 Constrained Functional Objects C.1.4 Iterators and Default-Constructibility |
158 | C.1.5 iterator_traits cannot be specialized C.2 Ranges and the Palo Alto TR (N3351) C.2.1 Sentinels C.2.2 Invocables and Projections C.2.3 No Distinct DistanceType Associated Type |
159 | C.2.4 Distance Primitive is O(1) for Random Access Iterators C.2.5 Output Iterators C.2.6 No Algorithm Reformulations |
160 | Bibliography |
161 | Index |
162 | Index of library names |