stl_vector::insert_aux方法原理
Posted 欢乐的企鹅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stl_vector::insert_aux方法原理相关的知识,希望对你有一定的参考价值。
stl_vector::insert_aux源码
template <class T, class Alloc>
void vector<T, Alloc>::insert_aux(iterator position, const T& x)
if (finish != end_of_storage) //如果还有备用空间
construct(finish, *(finish - 1));//在备用空间开头构造一个对象,以最后一个元素为对象内容
++finish;
T x_copy = x;
copy_backward(position, finish - 2, finish - 1);
*position = x_copy;
else
const size_type old_size = size();
const size_type len = old_size != 0 ? 2 * old_size : 1;
iterator new_start = data_allocator::allocate(len);
iterator new_finish = new_start;
__STL_TRY
new_finish = uninitialized_copy(start, position, new_start);
construct(new_finish, x);
++new_finish;
new_finish = uninitialized_copy(position, finish, new_finish);
# ifdef __STL_USE_EXCEPTIONS
catch(...)
destroy(new_start, new_finish);
data_allocator::deallocate(new_start, len);
throw;
# endif /* __STL_USE_EXCEPTIONS */
destroy(begin(), end());
deallocate();
start = new_start;
finish = new_finish;
end_of_storage = new_start + len;
备用内存够用时,执行流程如下图显示(结合源代码看此解释,版本为C++ 2.91版本)
备用内存不够用时,执行流程如下图显示
以上是关于stl_vector::insert_aux方法原理的主要内容,如果未能解决你的问题,请参考以下文章