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;
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
71 // 前置自增操作符
72 constexpr back_insert_iterator& operator++() noexcept { return *this; }
73 // 后置自增操作符
74 constexpr back_insert_iterator operator++(int) noexcept {
75 back_insert_iterator tmp = *this;
76 return tmp;
77 }
78};
79
86template <typename Container>
87NEFORCE_NODISCARD constexpr back_insert_iterator<Container> make_back_inserter(Container& x) noexcept {
89}
90
91
99template <typename Container>
101public:
103 using value_type = void;
105 using pointer = void;
106 using reference = void;
107
108private:
109 Container* container;
110
111public:
116 constexpr explicit front_insert_iterator(Container& x) noexcept :
117 container(_NEFORCE addressof(x)) {}
118
124 constexpr front_insert_iterator& operator=(const typename Container::value_type& value) {
125 container->push_front(value);
126 return *this;
127 }
128
134 constexpr front_insert_iterator& operator=(typename Container::value_type&& value) {
135 container->push_front(_NEFORCE move(value));
136 return *this;
137 }
138
139 NEFORCE_CONSTEXPR20 ~front_insert_iterator() noexcept = default;
140
141 NEFORCE_NODISCARD constexpr front_insert_iterator& operator*() noexcept { return *this; }
142
143 // 前置自增操作符
144 constexpr front_insert_iterator& operator++() noexcept { return *this; }
145 // 后置自增操作符
146 constexpr front_insert_iterator operator++(int) noexcept {
147 front_insert_iterator tmp = *this;
148 return tmp;
149 }
150};
151
158template <typename Container>
159NEFORCE_NODISCARD constexpr front_insert_iterator<Container> make_front_inserter(Container& x) noexcept {
161}
162
163
171template <typename Container>
173public:
175 using value_type = void;
177 using pointer = void;
178 using reference = void;
179
180private:
181 Container* container;
182 typename Container::iterator iter;
183
184public:
190 constexpr insert_iterator(Container& x, typename Container::iterator it) noexcept :
191 container(_NEFORCE addressof(x)),
192 iter(_NEFORCE move(it)) {}
193
199 constexpr insert_iterator& operator=(const typename Container::value_type& value) {
200 iter = container->insert(iter, value);
201 ++iter;
202 return *this;
203 }
204
210 constexpr insert_iterator& operator=(typename Container::value_type&& value) {
211 iter = container->insert(iter, _NEFORCE move(value));
212 ++iter;
213 return *this;
214 }
215
216 NEFORCE_CONSTEXPR20 ~insert_iterator() noexcept = default;
217
218 NEFORCE_NODISCARD constexpr insert_iterator& operator*() noexcept { return *this; }
219
220 // 前置自增操作符
221 constexpr insert_iterator& operator++() noexcept { return *this; }
222 // 后置自增操作符
223 constexpr insert_iterator operator++(int) noexcept {
224 insert_iterator tmp = *this;
225 return tmp;
226 }
227};
228
236template <typename Container>
237NEFORCE_NODISCARD constexpr insert_iterator<Container> make_inserter(Container& x,
238 typename Container::iterator it) noexcept {
239 return insert_iterator<Container>(x, it);
240}
241 // InsertIterators
243
244NEFORCE_END_NAMESPACE__
245#endif // NEFORCE_CORE_ITERATOR_INSERT_ITERATOR_HPP__
尾部插入迭代器
constexpr back_insert_iterator & operator=(const typename Container::value_type &value)
赋值操作符,插入元素到容器尾部
constexpr ~back_insert_iterator() noexcept=default
析构函数
output_iterator_tag iterator_category
迭代器类别
constexpr back_insert_iterator & operator=(typename Container::value_type &&value)
移动赋值操作符,插入元素到容器尾部
ptrdiff_t difference_type
差值类型
constexpr back_insert_iterator(Container &x) noexcept
构造函数
output_iterator_tag iterator_category
迭代器类别
constexpr front_insert_iterator(Container &x) noexcept
构造函数
constexpr ~front_insert_iterator() noexcept=default
析构函数
constexpr front_insert_iterator & operator=(const typename Container::value_type &value)
赋值操作符,插入元素到容器头部
ptrdiff_t difference_type
差值类型
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
构造函数
output_iterator_tag iterator_category
迭代器类别
void reference
引用类型
constexpr ~insert_iterator() noexcept=default
析构函数
constexpr insert_iterator & operator=(typename Container::value_type &&value)
移动赋值操作符,在指定位置插入元素
ptrdiff_t difference_type
差值类型
constexpr T * addressof(T &x) noexcept
获取对象的地址
constexpr back_insert_iterator< Container > make_back_inserter(Container &x) noexcept
创建back_insert_iterator的辅助函数
constexpr insert_iterator< Container > make_inserter(Container &x, typename Container::iterator it) noexcept
创建insert_iterator的辅助函数
constexpr front_insert_iterator< Container > make_front_inserter(Container &x) noexcept
创建front_insert_iterator的辅助函数
int64_t ptrdiff_t
指针差类型
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
输出迭代器标签
类型萃取