從 C++ STL source code 來了解 vector.clear() and vector.resize(0) 的差異。
Resource
STL source code 分析
vector<_Tp, _Allocator>::resize(size_type __sz)
{
size_type __cs = size();
if (__cs < __sz)
this->__append(__sz - __cs);
else if (__cs > __sz)
this->__destruct_at_end(this->__begin_ + __sz);
}
resize(0) 代表 __sz=0
,就會執行__destruct_at_end(this->__begin_)
。
void clear() _NOEXCEPT {__destruct_at_end(__begin_);}
所以其實 resize(0)
and clear
是一樣的。
Comments