*之前只知道理论。。。今天就来深入剖析一下源代码。。。→_→*
了解POD数据类型请戳传送门——什么是POD数据类型?
直接从vector的push_back进。。。
//stl\Stl_vector.h
//尾插
void push_back(const _Tp& __x) {
//先检查是否还有备用空间
if (_M_finish != _M_end_of_storage) {
//如果有,就直接在备用空间上构造元素
//construct定义在下面
construct(_M_finish, __x);
++_M_finish; //调整水位高高度
}
else
//此时已没有备用空间
//_M_insert_aux定义在下面
_M_insert_aux(end(), __x);
}
//stl\Stl_vector.h
template <class _Tp, class _Alloc>
void
vector<_Tp, _Alloc>::_M_insert_aux(iterator __position, const _Tp& __x)
{
//如果此时还有备用空间
if (_M_finish != _M_end_of_storage) {
//在备用空间起始处构造一个元素,并以vector最后一个元素值为初始值
construct(_M_finish, *(_M_finish - 1));
++_M_finish; //调整水位
_Tp __x_copy = __x;
copy_backward(__position, _M_finish - 2, _M_finish - 1);
*__position = __x_copy;
}
else { //此时没有备用空间
//计算原vector的大小
const size_type __old_size = size();
//如果原大小为0,