這里僅為概述,具體的詳情分析,可以Google下,會得到更詳盡的解釋。
1、函數clear和erase都將數組的size清空,但對應的空間並沒有回收,而且,一直push_baclk, 對應的capacity會越來越大。 vectoer的size和capacity是兩個不同的概念。
//std::vector<std::string>::iterator & it = _file_arr.begin(); //for (; it != _file_arr.end(); ) // it = _file_arr.erase(it);
釋放並回收空間用下面的方法, swap 函數:
2、聲明
std::vector<std::string> _file_arr;
3、釋放並回收
_file_arr.swap(std::vector<std::string>());
4、亦或者調用下面函數,僅為參考。
template < typename T > void clear_vector(std::vector< T >& vt) { std::vector< T > vector_arr; vector_arr.swap(vt); }
5、原理分析:
利用臨時變量實現空間的回收,上面4 中的vertor_arr的生命周期僅在函數體內,當函數執行結束,臨時變量會被回收,進而釋放回收對應的空間。