MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
insert_iterator.hpp
浏览该文件的文档.
1#ifndef MSTL_CORE_ITERATOR_INSERT_ITERATOR_HPP__
2#define MSTL_CORE_ITERATOR_INSERT_ITERATOR_HPP__
3
10
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(_MSTL 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(_MSTL move(value));
64 return *this;
65 }
66
67 MSTL_CONSTEXPR20 ~back_insert_iterator() noexcept = default;
68
69 MSTL_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>
81MSTL_NODISCARD constexpr back_insert_iterator<Container>
82make_back_inserter(Container& x) noexcept {
84}
85
86
94template <typename Container>
96public:
98 using value_type = void;
99 using difference_type = void;
100 using pointer = void;
101 using reference = void;
102
103private:
104 Container* container;
105
106public:
111 constexpr explicit front_insert_iterator(Container& x) noexcept
112 : container(_MSTL addressof(x)) {}
113
119 constexpr front_insert_iterator& operator =(const typename Container::value_type& value) {
120 container->push_front(value);
121 return *this;
122 }
123
129 constexpr front_insert_iterator& operator =(typename Container::value_type&& value) {
130 container->push_front(_MSTL move(value));
131 return *this;
132 }
133
134 MSTL_CONSTEXPR20 ~front_insert_iterator() noexcept = default;
135
136 MSTL_NODISCARD constexpr front_insert_iterator& operator *() noexcept { return *this; }
137 constexpr front_insert_iterator& operator ++() noexcept { return *this; }
138 constexpr front_insert_iterator& operator ++(int) noexcept { return *this; }
139};
140
147template <typename Container>
148MSTL_NODISCARD constexpr front_insert_iterator<Container>
149make_front_inserter(Container& x) noexcept {
151}
152
153
161template <typename Container>
163public:
165 using value_type = void;
166 using difference_type = void;
167 using pointer = void;
168 using reference = void;
169
170private:
171 Container* container;
172 typename Container::iterator iter;
173
174public:
180 constexpr insert_iterator(Container& x, typename Container::iterator it) noexcept
181 : container(_MSTL addressof(x)), iter(_MSTL move(it)) {}
182
188 constexpr insert_iterator& operator =(const typename Container::value_type& value) {
189 iter = container->insert(iter, value);
190 ++iter;
191 return *this;
192 }
193
199 constexpr insert_iterator& operator =(typename Container::value_type&& value) {
200 iter = container->insert(iter, _MSTL move(value));
201 ++iter;
202 return *this;
203 }
204
205 MSTL_CONSTEXPR20 ~insert_iterator() noexcept = default;
206
207 MSTL_NODISCARD constexpr insert_iterator& operator *() noexcept { return *this; }
208 constexpr insert_iterator& operator ++() noexcept { return *this; }
209 constexpr insert_iterator& operator ++(int) noexcept { return *this; }
210};
211
219template <typename Container>
220MSTL_NODISCARD constexpr insert_iterator<Container>
221make_inserter(Container& x, typename Container::iterator it) noexcept {
222 return insert_iterator<Container>(x, it);
223}
224 // InsertIterators
226
228#endif // MSTL_CORE_ITERATOR_INSERT_ITERATOR_HPP__
尾部插入迭代器
constexpr back_insert_iterator & operator=(const typename Container::value_type &value)
赋值操作符,插入元素到容器尾部
output_iterator_tag iterator_category
迭代器类别
MSTL_CONSTEXPR20 ~back_insert_iterator() noexcept=default
析构函数
constexpr back_insert_iterator & operator++() noexcept
前置自增操作符
constexpr back_insert_iterator(Container &x) noexcept
构造函数
output_iterator_tag iterator_category
迭代器类别
constexpr front_insert_iterator(Container &x) noexcept
构造函数
constexpr front_insert_iterator & operator=(const typename Container::value_type &value)
赋值操作符,插入元素到容器头部
constexpr front_insert_iterator & operator++() noexcept
前置自增操作符
MSTL_CONSTEXPR20 ~front_insert_iterator() noexcept=default
析构函数
指定位置插入迭代器
constexpr insert_iterator & operator=(const typename Container::value_type &value)
赋值操作符,在指定位置插入元素
constexpr insert_iterator(Container &x, typename Container::iterator it) noexcept
构造函数
void difference_type
差值类型
output_iterator_tag iterator_category
迭代器类别
constexpr insert_iterator & operator++() noexcept
前置自增操作符
void reference
引用类型
MSTL_CONSTEXPR20 ~insert_iterator() noexcept=default
析构函数
MSTL_NODISCARD constexpr T * addressof(T &x) noexcept
获取对象的地址
MSTL_NODISCARD constexpr insert_iterator< Container > make_inserter(Container &x, typename Container::iterator it) noexcept
创建insert_iterator的辅助函数
MSTL_NODISCARD constexpr front_insert_iterator< Container > make_front_inserter(Container &x) noexcept
创建front_insert_iterator的辅助函数
MSTL_NODISCARD constexpr back_insert_iterator< Container > make_back_inserter(Container &x) noexcept
创建back_insert_iterator的辅助函数
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result)
移动范围元素
输出迭代器标签
MSTL类型萃取