13#ifndef RANGES_V3_ITERATOR_INSERT_ITERATORS_HPP
14#define RANGES_V3_ITERATOR_INSERT_ITERATORS_HPP
22#include <range/v3/utility/addressof.hpp>
24#include <range/v3/detail/prologue.hpp>
30 template<
typename Container>
31 struct back_insert_iterator
33 using container_type = Container;
34 using difference_type = std::ptrdiff_t;
36 constexpr back_insert_iterator() =
default;
37 constexpr explicit back_insert_iterator(Container & x)
40 back_insert_iterator & operator=(
typename Container::value_type
const & value)
45 back_insert_iterator & operator=(
typename Container::value_type && value)
50 back_insert_iterator & operator*()
54 back_insert_iterator & operator++()
58 back_insert_iterator operator++(
int)
69 template<
typename Container>
79 template<
typename Container>
80 struct front_insert_iterator
82 using container_type = Container;
83 using difference_type = std::ptrdiff_t;
85 constexpr front_insert_iterator() =
default;
86 constexpr explicit front_insert_iterator(Container & x)
89 front_insert_iterator & operator=(
typename Container::value_type
const & value)
94 front_insert_iterator & operator=(
typename Container::value_type && value)
99 front_insert_iterator & operator*()
103 front_insert_iterator & operator++()
107 front_insert_iterator operator++(
int)
118 template<
typename Cont>
128 template<
typename Container>
129 struct insert_iterator
131 using container_type = Container;
132 using difference_type = std::ptrdiff_t;
134 constexpr insert_iterator() =
default;
135 constexpr explicit insert_iterator(Container & x,
typename Container::iterator w)
139 insert_iterator & operator=(
typename Container::value_type
const & value)
141 where_ = ranges::next(
container_->insert(where_, value));
144 insert_iterator & operator=(
typename Container::value_type && value)
146 where_ = ranges::next(
container_->insert(where_, std::move(value)));
149 insert_iterator & operator*()
153 insert_iterator & operator++()
157 insert_iterator & operator++(
int)
164 typename Container::iterator where_ =
typename Container::iterator();
169 template<
typename Cont>
171 typename Cont::iterator where)
const
183 using ranges::back_inserter;
185 using ranges::front_inserter;
187 using ranges::inserter;
193RANGES_DIAGNOSTIC_PUSH
194RANGES_DIAGNOSTIC_IGNORE_MISMATCHED_TAGS
198 template<
typename Container>
199 struct iterator_traits<::ranges::back_insert_iterator<Container>>
200 : ::ranges::detail::std_output_iterator_traits<>
203 template<
typename Container>
204 struct iterator_traits<::ranges::front_insert_iterator<Container>>
205 : ::ranges::detail::std_output_iterator_traits<>
208 template<
typename Container>
209 struct iterator_traits<::ranges::insert_iterator<Container>>
210 : ::ranges::detail::std_output_iterator_traits<>
217#include <range/v3/detail/epilogue.hpp>
The container_ concept std::vector is a container, std::array is not.
RANGES_INLINE_VARIABLE(detail::to_container_fn< detail::from_range< std::vector > >, to_vector) template< template< typename... > class ContT > auto to(RANGES_HIDDEN_DETAIL(detail
For initializing a container of the specified type with the elements of an Range.
Definition conversion.hpp:399
Definition adjacent_find.hpp:67
Definition insert_iterators.hpp:32
Definition insert_iterators.hpp:68
Definition insert_iterators.hpp:81
Definition insert_iterators.hpp:117
Definition insert_iterators.hpp:130
Definition insert_iterators.hpp:168