C++ Vector clear() and resize(0)

從 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