Alinshans/MyTinySTL

vector.insert() 没有更新 end_

luoxhei opened this issue · 0 comments

测试 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;