91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于vector容器的內存釋放

發布時間:2020-10-12 00:43:28 來源:網絡 閱讀:1886 作者:q381989042 欄目:編程語言

以前使用vector容器一直有個誤區=。=,然后最近面試被鄙視了QWQ


先說一下vector容器的簡單原理:

  對于vector容器而言,數據結構就是數組,在STL中我有剖析源碼。其中實現的是相當于數組的方面,然后其中對于容器的操作函數都有:

 


在這之中。插入操作我們就暫且不提。就是數組的數據插入。

現在說一下關于vector容器中的空間設置

 vector中有2個大小指標,一個是size:代表當前數據的大小

            另外一個是capacity.代表著當前vector所申請的空間大小


下面提一下空間配置器。對于STL所有的容器而言,都是使用STL內部實現的alloc(內存池)進行空間的申請。vector是一個靜態的空間,也就是我們申請以后就無法進行修改了。


以前我很蠢的直接調用clear然后就清除數據就ok了,然后空間隨著作用域進行釋放。。


結果這樣會有很大的內存浪費。。


所以解決方法是這樣

//加一對大括號是可以讓tmp退出{}的時候自動析構{ 
    std::vector<int> tmp =   nums;  
    nums.swap(tmp); 
}

通過swap函數進行空間轉換,然后就出去作用域vector就進行了釋放。


在標準一點是這樣的:

template < class T >void ClearVector( vector< T >& vt ) 
{
    vector< T > vtTemp; 
    veTemp.swap( vt );
}


就是通過作用域還有swqp的搭配進行空間的釋放,然后就OK了


下面提一個小問題:

如果vector中存放的是指針,那么當vector銷毀時,這些指針指向的對象不會被銷毀,那么內存就不會被釋放。如下面這種情況,vector中的元素時由new操作動態申請出來的對象指針:

for (vector<void *>::iterator it = v.begin(); it != v.end(); it ++) 
    if (NULL != *it) 
    {
        delete *it; 
        *it = NULL;
    }
v.clear();

當時很sb的就回答成這種情況了,面壁面壁。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳江市| 辽源市| 商丘市| 兴隆县| 南康市| 百色市| 衡南县| 晴隆县| 福泉市| 资阳市| 大方县| 临泉县| 深水埗区| 武隆县| 西充县| 尤溪县| 吴忠市| 宿松县| 伊宁县| 安国市| 仁化县| 米林县| 双鸭山市| 思茅市| 鹤岗市| 井冈山市| 大关县| 新河县| 松江区| 宜春市| 永川市| 雷波县| 开远市| 普宁市| 寿光市| 璧山县| 武汉市| 平阴县| 鹤庆县| 连平县| 赤峰市|