C++11 STL之vector实现深入剖析(下)

本文继续深入剖析C++11 STL中的vector,重点讲解pop_back函数,它不会释放内存,而erase接口在删除非末尾元素时需要移动后续对象并析构最后一个。同时,std::move在优化中发挥了作用,确保高效的内存操作。此外,解释了_Vector_base中复杂模板语法的含义。
摘要由CSDN通过智能技术生成

       上回我们分析了push_back函数。接下来我们来看下pop_back函数。递减_M_finish指针,然后析构最后一个对象,但是内存不会进行释放,即capacity接口返回值不变。这也说明了为何没有pop_front接口;倘若有,那么每一次调用都得将所有对象向前移动,vector不擅长此类操作。

void pop_back()
{
	/*
	* 递减_M_finish指针, 并对最后一个对象执行析构
	*/
	--this->_M_impl._M_finish;
	_Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
}

        相比起pop_back接口,erase接口的工作则昂贵得多。首先当删除对象并非最后一个时,需将删除位置往后对象全部向前移动。然后再析构最后一个对象,同样的,erase不会释放内存。或许你会好奇,为什么是析构最后一个对象?

template<typename _Tp, typename _Alloc>
typename vector<_Tp, _Allo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值