NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
insert_iterator.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_ITERATOR_INSERT_ITERATOR_HPP__
2#define NEFORCE_CORE_ITERATOR_INSERT_ITERATOR_HPP__
3
10
12NEFORCE_BEGIN_NAMESPACE__
13
19
27template <typename Container>
29public:
31 using value_type = void;
32 using difference_type = void;
33 using pointer = void;
34 using reference = void;
35
36private:
37 Container* container;
38
39public:
44 constexpr explicit back_insert_iterator(Container& x) noexcept :
45 container(_NEFORCE addressof(x)) {}
46
52 constexpr back_insert_iterator& operator=(const typename Container::value_type& value) {
53 container->push_back(value);
54 return *this;
55 }
56
62 constexpr back_insert_iterator& operator=(typename Container::value_type&& value) {
63 container->push_back(_NEFORCE move(value));
64 return *this;
65 }
66
67 NEFORCE_CONSTEXPR20 ~back_insert_iterator() noexcept = default;
68
69 NEFORCE_NODISCARD constexpr back_insert_iterator& operator*() noexcept { return *this; }
70 constexpr back_insert_iterator& operator++() noexcept { return *this; }
71 constexpr back_insert_iterator& operator++(int) noexcept { return *this; }
72};
73
80template <typename Container>
81NEFORCE_NODISCARD constexpr back_insert_iterator<Container> make_back_inserter(Container& x) noexcept {
83}
84
85
93template <typename Container>
95public:
97 using value_type = void;
98 using difference_type = void;
99 using pointer = void;
100 using reference = void;
101
102private:
103 Container* container;
104
105public:
110 constexpr explicit front_insert_iterator(Container& x) noexcept :
111 container(_NEFORCE addressof(x)) {}
112
118 constexpr front_insert_iterator& operator=(const typename Container::value_type& value) {
119 container->push_front(value);
120 return *this;
121 }
122
128 constexpr front_insert_iterator& operator=(typename Container::value_type&& value) {
129 container->push_front(_NEFORCE move(value));
130 return *this;
131 }
132
133 NEFORCE_CONSTEXPR20 ~front_insert_iterator() noexcept = default;
134
135 NEFORCE_NODISCARD constexpr front_insert_iterator& operator*() noexcept { return *this; }
136 constexpr front_insert_iterator& operator++() noexcept { return *this; }
137 constexpr front_insert_iterator& operator++(int) noexcept { return *this; }
138};
139
146template <typename Container>
147NEFORCE_NODISCARD constexpr front_insert_iterator<Container> make_front_inserter(Container& x) noexcept {
149}
150
151
159template <typename Container>
161public:
163 using value_type = void;
164 using difference_type = void;
165 using pointer = void;
166 using reference = void;
167
168private:
169 Container* container;
170 typename Container::iterator iter;
171
172public:
178 constexpr insert_iterator(Container& x, typename Container::iterator it) noexcept :
179 container(_NEFORCE addressof(x)),
180 iter(_NEFORCE move(it)) {}
181
187 constexpr insert_iterator& operator=(const typename Container::value_type& value) {
188 iter = container->insert(iter, value);
189 ++iter;
190 return *this;
191 }
192
198 constexpr insert_iterator& operator=(typename Container::value_type&& value) {
199 iter = container->insert(iter, _NEFORCE move(value));
200 ++iter;
201 return *this;
202 }
203
204 NEFORCE_CONSTEXPR20 ~insert_iterator() noexcept = default;
205
206 NEFORCE_NODISCARD constexpr insert_iterator& operator*() noexcept { return *this; }
207 constexpr insert_iterator& operator++() noexcept { return *this; }
208 constexpr insert_iterator& operator++(int) noexcept { return *this; }
209};
210
218template <typename Container>
219NEFORCE_NODISCARD constexpr insert_iterator<Container> make_inserter(Container& x,
220 typename Container::iterator it) noexcept {
221 return insert_iterator<Container>(x, it);
222}
223 // InsertIterators
225
226NEFORCE_END_NAMESPACE__
227#endif // NEFORCE_CORE_ITERATOR_INSERT_ITERATOR_HPP__
尾部插入迭代器
constexpr back_insert_iterator & operator=(const typename Container::value_type &value)
赋值操作符,插入元素到容器尾部
output_iterator_tag iterator_category
迭代器类别
constexpr back_insert_iterator & operator=(typename Container::value_type &&value)
移动赋值操作符,插入元素到容器尾部
constexpr back_insert_iterator & operator++(int) noexcept
后置自增操作符
constexpr back_insert_iterator & operator++() noexcept
前置自增操作符
NEFORCE_CONSTEXPR20 ~back_insert_iterator() noexcept=default
析构函数
constexpr back_insert_iterator(Container &x) noexcept
构造函数
output_iterator_tag iterator_category
迭代器类别
constexpr front_insert_iterator & operator++(int) noexcept
后置自增操作符
constexpr front_insert_iterator(Container &x) noexcept
构造函数
NEFORCE_CONSTEXPR20 ~front_insert_iterator() noexcept=default
析构函数
constexpr front_insert_iterator & operator=(const typename Container::value_type &value)
赋值操作符,插入元素到容器头部
constexpr front_insert_iterator & operator++() noexcept
前置自增操作符
constexpr front_insert_iterator & operator=(typename Container::value_type &&value)
移动赋值操作符,插入元素到容器头部
指定位置插入迭代器
constexpr insert_iterator & operator=(const typename Container::value_type &value)
赋值操作符,在指定位置插入元素
constexpr insert_iterator(Container &x, typename Container::iterator it) noexcept
构造函数
NEFORCE_CONSTEXPR20 ~insert_iterator() noexcept=default
析构函数
void difference_type
差值类型
output_iterator_tag iterator_category
迭代器类别
constexpr insert_iterator & operator++() noexcept
前置自增操作符
void reference
引用类型
constexpr insert_iterator & operator=(typename Container::value_type &&value)
移动赋值操作符,在指定位置插入元素
constexpr insert_iterator & operator++(int) noexcept
后置自增操作符
NEFORCE_NODISCARD constexpr T * addressof(T &x) noexcept
获取对象的地址
NEFORCE_NODISCARD constexpr insert_iterator< Container > make_inserter(Container &x, typename Container::iterator it) noexcept
创建insert_iterator的辅助函数
NEFORCE_NODISCARD constexpr back_insert_iterator< Container > make_back_inserter(Container &x) noexcept
创建back_insert_iterator的辅助函数
NEFORCE_NODISCARD constexpr front_insert_iterator< Container > make_front_inserter(Container &x) noexcept
创建front_insert_iterator的辅助函数
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
输出迭代器标签
类型萃取