vector.insert() 没有更新 end_
luoxhei opened this issue · 0 comments
luoxhei commented
测试 vector.insert 的时候,如果在尾部插入的话,是没问题的:
After v1.insert(v1.end(), 7) :
v1 : 0 1 2 3 4 6 6 7
但我再在头部插入元素时,会出现没有打印全的情况:
After v1.insert(v1.begin(), 7) :
v1 : 7 0 1 2 3 4 6 6 // 应该是 7 0 1 2 3 4 6 6 7
在代码(vector.h 407行):
if (end_ != cap_ && xpos == end_)
{
data_allocator::construct(mystl::address_of(*end_), mystl::forward<Args>(args)...);
++end_; //这里更新了,下面没有更新
}
else if (end_ != cap_)
{
auto new_end = end_;
data_allocator::construct(mystl::address_of(*end_), *(end_ - 1));
++new_end;
mystl::copy_backward(xpos, end_ - 1, end_);
*xpos = value_type(mystl::forward<Args>(args)...);
}
应该缺少一行 end_ = new_end;