@@ -61,7 +61,7 @@ struct List {
61
61
62
62
void deleteNode (ListNode *node) noexcept {
63
63
AllocNode allocNode{m_alloc};
64
- std::allocator_traits<AllocNode>::deallocate (allocNode, static_cast <ListValueNode<T> *>(node));
64
+ std::allocator_traits<AllocNode>::deallocate (allocNode, static_cast <ListValueNode<T> *>(node), 1 );
65
65
}
66
66
67
67
public:
@@ -114,8 +114,8 @@ struct List {
114
114
assign (that.cbegin (), that.cend ());
115
115
}
116
116
117
- bool empty () noexcept {
118
- return m_dummy.m_prev == m_dummy. m_next ;
117
+ bool empty () const noexcept {
118
+ return m_dummy.m_next == & m_dummy;
119
119
}
120
120
121
121
T &front () noexcept {
@@ -178,30 +178,16 @@ struct List {
178
178
prev->m_next = &m_dummy;
179
179
}
180
180
181
- void _uninit_assign (size_t n, T const &val) {
181
+ template <typename ... Args>
182
+ requires std::constructible_from<value_type, Args...>
183
+ void _uninit_assign (size_t n, Args&&... args) {
182
184
ListNode *prev = &m_dummy;
183
- while (n) {
184
- ListNode *node = newNode ();
185
- prev->m_next = node;
186
- node->m_prev = prev;
187
- std::construct_at (&node->value (), val);
188
- prev = node;
189
- --n;
190
- }
191
- m_dummy.m_prev = prev;
192
- prev->m_next = &m_dummy;
193
- m_size = n;
194
- }
195
-
196
- void _uninit_assign (size_t n) {
197
- ListNode *prev = &m_dummy;
198
- while (n) {
185
+ for (size_t i = 0 ; i < n; ++i) {
199
186
ListNode *node = newNode ();
200
187
prev->m_next = node;
201
188
node->m_prev = prev;
202
- std::construct_at (&node->value ());
189
+ std::construct_at (&node->value (), std::forward<Args>(args)... );
203
190
prev = node;
204
- --n;
205
191
}
206
192
m_dummy.m_prev = prev;
207
193
prev->m_next = &m_dummy;
@@ -213,7 +199,7 @@ struct List {
213
199
return m_size;
214
200
}
215
201
216
- static constexpr std::size_t max_size () noexcept {
202
+ constexpr std::size_t max_size () const noexcept {
217
203
return std::numeric_limits<std::size_t >::max ();
218
204
}
219
205
@@ -345,7 +331,7 @@ struct List {
345
331
346
332
iterator operator --(int ) noexcept { // iterator--
347
333
auto tmp = *this ;
348
- ++ *this ;
334
+ -- *this ;
349
335
return tmp;
350
336
}
351
337
0 commit comments