From Jason Turner

[insert.iterators]

Diff to HTML by rtfpessoa

tmp/tmpx6wcoie9/{from.md → to.md} RENAMED
@@ -1,7 +1,9 @@
1
  ### Insert iterators <a id="insert.iterators">[[insert.iterators]]</a>
2
 
 
 
3
  To make it possible to deal with insertion in the same way as writing
4
  into an array, a special kind of iterator adaptors, called *insert
5
  iterators*, are provided in the library. With regular iterator classes,
6
 
7
  ``` cpp
@@ -34,21 +36,20 @@ iterators out of a container.
34
  ``` cpp
35
  namespace std {
36
  template<class Container>
37
  class back_insert_iterator {
38
  protected:
39
- Container* container = nullptr;
40
 
41
  public:
42
  using iterator_category = output_iterator_tag;
43
  using value_type = void;
44
  using difference_type = ptrdiff_t;
45
  using pointer = void;
46
  using reference = void;
47
  using container_type = Container;
48
 
49
- constexpr back_insert_iterator() noexcept = default;
50
  constexpr explicit back_insert_iterator(Container& x);
51
  constexpr back_insert_iterator& operator=(const typename Container::value_type& value);
52
  constexpr back_insert_iterator& operator=(typename Container::value_type&& value);
53
 
54
  constexpr back_insert_iterator& operator*();
@@ -109,21 +110,20 @@ template<class Container>
109
  ``` cpp
110
  namespace std {
111
  template<class Container>
112
  class front_insert_iterator {
113
  protected:
114
- Container* container = nullptr;
115
 
116
  public:
117
  using iterator_category = output_iterator_tag;
118
  using value_type = void;
119
  using difference_type = ptrdiff_t;
120
  using pointer = void;
121
  using reference = void;
122
  using container_type = Container;
123
 
124
- constexpr front_insert_iterator() noexcept = default;
125
  constexpr explicit front_insert_iterator(Container& x);
126
  constexpr front_insert_iterator& operator=(const typename Container::value_type& value);
127
  constexpr front_insert_iterator& operator=(typename Container::value_type&& value);
128
 
129
  constexpr front_insert_iterator& operator*();
@@ -184,22 +184,21 @@ template<class Container>
184
  ``` cpp
185
  namespace std {
186
  template<class Container>
187
  class insert_iterator {
188
  protected:
189
- Container* container = nullptr;
190
- ranges::iterator_t<Container> iter = ranges::iterator_t<Container>();
191
 
192
  public:
193
  using iterator_category = output_iterator_tag;
194
  using value_type = void;
195
  using difference_type = ptrdiff_t;
196
  using pointer = void;
197
  using reference = void;
198
  using container_type = Container;
199
 
200
- insert_iterator() = default;
201
  constexpr insert_iterator(Container& x, ranges::iterator_t<Container> i);
202
  constexpr insert_iterator& operator=(const typename Container::value_type& value);
203
  constexpr insert_iterator& operator=(typename Container::value_type&& value);
204
 
205
  constexpr insert_iterator& operator*();
 
1
  ### Insert iterators <a id="insert.iterators">[[insert.iterators]]</a>
2
 
3
+ #### General <a id="insert.iterators.general">[[insert.iterators.general]]</a>
4
+
5
  To make it possible to deal with insertion in the same way as writing
6
  into an array, a special kind of iterator adaptors, called *insert
7
  iterators*, are provided in the library. With regular iterator classes,
8
 
9
  ``` cpp
 
36
  ``` cpp
37
  namespace std {
38
  template<class Container>
39
  class back_insert_iterator {
40
  protected:
41
+ Container* container;
42
 
43
  public:
44
  using iterator_category = output_iterator_tag;
45
  using value_type = void;
46
  using difference_type = ptrdiff_t;
47
  using pointer = void;
48
  using reference = void;
49
  using container_type = Container;
50
 
 
51
  constexpr explicit back_insert_iterator(Container& x);
52
  constexpr back_insert_iterator& operator=(const typename Container::value_type& value);
53
  constexpr back_insert_iterator& operator=(typename Container::value_type&& value);
54
 
55
  constexpr back_insert_iterator& operator*();
 
110
  ``` cpp
111
  namespace std {
112
  template<class Container>
113
  class front_insert_iterator {
114
  protected:
115
+ Container* container;
116
 
117
  public:
118
  using iterator_category = output_iterator_tag;
119
  using value_type = void;
120
  using difference_type = ptrdiff_t;
121
  using pointer = void;
122
  using reference = void;
123
  using container_type = Container;
124
 
 
125
  constexpr explicit front_insert_iterator(Container& x);
126
  constexpr front_insert_iterator& operator=(const typename Container::value_type& value);
127
  constexpr front_insert_iterator& operator=(typename Container::value_type&& value);
128
 
129
  constexpr front_insert_iterator& operator*();
 
184
  ``` cpp
185
  namespace std {
186
  template<class Container>
187
  class insert_iterator {
188
  protected:
189
+ Container* container;
190
+ ranges::iterator_t<Container> iter;
191
 
192
  public:
193
  using iterator_category = output_iterator_tag;
194
  using value_type = void;
195
  using difference_type = ptrdiff_t;
196
  using pointer = void;
197
  using reference = void;
198
  using container_type = Container;
199
 
 
200
  constexpr insert_iterator(Container& x, ranges::iterator_t<Container> i);
201
  constexpr insert_iterator& operator=(const typename Container::value_type& value);
202
  constexpr insert_iterator& operator=(typename Container::value_type&& value);
203
 
204
  constexpr insert_iterator& operator*();