c++ vector釋放概述


這里僅為概述,具體的詳情分析,可以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的生命周期僅在函數體內,當函數執行結束,臨時變量會被回收,進而釋放回收對應的空間。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM