|
@@ -221,23 +221,27 @@ public:
|
|
|
}
|
|
|
|
|
|
// insert the value v in front of the given iterator
|
|
|
- void insert(const iterator_type& iter, const value_type& v) noexcept
|
|
|
+ iterator_type insert(const iterator_type& iter, const value_type& v) noexcept
|
|
|
{
|
|
|
node_base_type* new_node = allocator_traits<allocator_type>::allocate_and_construct(v);
|
|
|
+ iterator_type ret(new_node);
|
|
|
iter._node()->prev->connect(new_node);
|
|
|
new_node->connect(iter._node());
|
|
|
|
|
|
++_size();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
// insert the value v in front of the given iterator
|
|
|
- void insert(const iterator_type& iter, value_type&& v) noexcept
|
|
|
+ iterator_type insert(const iterator_type& iter, value_type&& v) noexcept
|
|
|
{
|
|
|
node_base_type* new_node = allocator_traits<allocator_type>::allocate_and_construct(v);
|
|
|
+ iterator_type ret(new_node);
|
|
|
iter._node().prev->connect(new_node);
|
|
|
new_node->connect(iter._node());
|
|
|
|
|
|
++_size();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
void push_back(const value_type& v) noexcept
|
|
@@ -250,6 +254,12 @@ public:
|
|
|
insert(end(), v);
|
|
|
}
|
|
|
|
|
|
+ template <typename... Args>
|
|
|
+ reference_type emplace_back(Args... args)
|
|
|
+ {
|
|
|
+ return insert(end(), value_type(args...));
|
|
|
+ }
|
|
|
+
|
|
|
void push_front(const value_type& v) noexcept
|
|
|
{
|
|
|
insert(begin(), v);
|
|
@@ -260,6 +270,12 @@ public:
|
|
|
insert(begin(), v);
|
|
|
}
|
|
|
|
|
|
+ template <typename... Args>
|
|
|
+ reference_type emplace_front(Args... args)
|
|
|
+ {
|
|
|
+ return insert(begin(), value_type(args...));
|
|
|
+ }
|
|
|
+
|
|
|
size_t size(void) const noexcept
|
|
|
{
|
|
|
return _size();
|