Shopping Cart

No products in the cart.

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
Guaranteed Safe Checkout
Category:

If you have any questions, feel free to reach out to our online customer service team by clicking on the bottom right corner. We’re here to assist you 24/7.
Email:[email protected]

[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
BSI PD ISO/IEC TS 21425:2017
$215.11