vector :: erase如何从它的内​​部数组中删除所选元素

1 c++ arrays vector

由于vector类型的对象在内部由数组支持,因此vector类的erase函数如何从其内部数组中删除所选元素?

我正在寻找至少一个基本代码示例的深入解释.

Mat*_*son 5

通过复制擦除元素后的元素,然后在末尾填充"空"元素.然后将尺寸标记为少一个.

大致代码就像这样[ACTUAL实现将使用技巧来避免制作不必要的副本等,例如使用移动语义]

template<typename T>std::vector::erase(int index)
{
   // Call destructor of T for the one being deleted.
   storage[index].T~();
   for(i = index; i < size-1; i++)
   {
       storage[i] = storage[i+1];
   }
   storage[size-1] = T();
   size--;
}
Run Code Online (Sandbox Code Playgroud)

如果你想看看REAL实现是如何工作的,我建议你启动调试器,然后亲自试试.但是如果它非常复杂且难以理解也不要感到惊讶 - 编写库代码的人通常非常精通语言的工作方式,并且会使用"书中的任何技巧"来使其更快/更小/更整洁.