实际上, 的实现vector
是可见的,因为它是一个模板,因此您可以查看详细信息:
iterator erase(const_iterator _Where)
{ // erase element at where
if (_Where._Mycont != this
|| _Where._Myptr < _Myfirst || _Mylast <= _Where._Myptr)
_DEBUG_ERROR("vector erase iterator outside range");
_STDEXT unchecked_copy(_Where._Myptr + 1, _Mylast, _Where._Myptr);
_Destroy(_Mylast - 1, _Mylast);
_Orphan_range(_Where._Myptr, _Mylast);
--_Mylast;
return (iterator(_Where._Myptr, this));
}
基本上,这条线
unchecked_copy(_Where._Myptr + 1, _Mylast, _Where._Myptr);
完全按照您的想法进行 - 复制以下元素(或如 bames53 指出的那样在 C++11 中移动它们)。
要回答您的第二个问题,不,容量不能自行减少。
std
可以在http://www.cplusplus.com/reference/stl/找到算法的复杂性,并且如前所述,实现是可见的。