How vector increases its size

template <class _Tp, class _Alloc>
void _VECTOR_IMPL<_Tp, _Alloc> ::_M_insert_overflow(
  pointer __pos, 
const _Tp&
 __x, 
  
const __true_type& /*_TrivialCpy*/
,
  size_type __fill_len, 
bool __atend ) 
{
  
const size_type __old_size =
 size();
  
  
/**
   * Increase the capacity, there's efficiency issue here why *double*
   * size of the original  
   
*/

  
const size_type __len = __old_size + (max)(__old_size, __fill_len);

  pointer __new_start 
= this->
_M_end_of_storage.allocate(__len);
  
  
/**
   * use memmove rather than reassignment(operator=) of every 
   * single element
   
*/

  pointer __new_finish 
= (pointer)__copy_trivial(this->_M_start, 
                                      __pos, __new_start);
  
// handle insertion

  __new_finish = __fill_n(__new_finish, __fill_len, __x);
  
if (!
__atend)
    __new_finish 
=
 (pointer)__copy_trivial(
                      __pos, 
this->_M_finish, __new_finish); //
 copy remainder
  
// deallocate the original memory

  _M_clear();
  
// attached to the new memory

  _M_set(__new_start, __new_finish, 
         __new_start 
+ __len   // _M_end_of_storage._M_data

         );
}


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值