stl使用心得 vector篇

2021-06-22 09:23:09 字數 1362 閱讀 8613

vector 是標準stl序列容器,它是在乙個連續記憶體塊中儲存它的元素,經常用作陣列的替代品,在使用過程中,無需關注記憶體的動態分配,在使用時非常方便。然而,在使用vector時,若使用不當,也會存在有很多陷阱。比較常見的問題有如下幾個:

(注:本文中所有測試**編譯環境為:gcc版本4.6.3。)

首先來看

乙個示例:

#include#include#includeint main()

輸出結果為:

capacity:3

size:1

capacity:3

size:2

vector=0    1

在vector操作中,經常遇到的迭代器操作異常的問題,主要有以下兩種:

1、由於擴容導致迭代器失效,先看以下示例**:

int main()

else

it++;

} std::cout<<"after erase capacity:"《解決過剩記憶體問題,利用的乙個技巧就是,用當前vector物件去拷貝構造乙個臨時的vector物件,然後,利用swap函式進行交換,以達到收縮記憶體的目的。示例**如下:

int main()

else

it++;

} std::vector(vint).swap(vint);

std::cout<<"after erase capacity:"<(vint).swap(vint);

std::cout<<"after clear capacity:"<

當在某個c的api中需要對vector元素進行直接操作時,經常會發生指標引用的問題。先看以下示例**:

void erase(int* p, int v, int size)

while(ivint;

vint.push_back(16);

vint.push_back(2);

vint.push_back(77);

std::cout<<"init size:"<::iterator it = vint.begin(); it != vint.end(); it++)

std::cout<::iterator it = vint.begin(); it != vint.end(); it++)

std::cout《在該示例中,模擬實現了乙個vector的刪除操作,也就是將vector中指定的元素刪除,通過輸出結果,我們可以看出,函式erase將指定元素從vector中進行了刪除,然而這種刪除操作是通過指標直接對vector中的元素進行操作的,並不會修改vector物件的一些屬性值,如size等。從而對於vector物件的屬性值產生較大地影響。

該類問題的解決方案,可能更多地需要從設計層面進行約束。

c 中vector使用心得

c 中的vector即是c中陣列的高階版,可以擴充套件,更加方便,但是使用的時候也會出現一些問題。初始化時vectora 那麼a就只有0個元素,此時用a 0 0 賦值會報錯 若要用賦值的方式對vector進行修改,則需要事先為其分配有足夠的記憶體空間,要麼初始化時vectora 3 a 0 0 要麼...

STL學習篇 vector的簡單使用

vector,乙個動態陣列!在堆中操作,元素連續存放,可以直接訪問其中的任何元素,初始分配有記憶體,當保留記憶體不夠的時候,會再分配記憶體 下面看乙個vector的建構函式例子 1 include 2 include3 include45 intmain 633 34for vector size ...

frameset 使用心得

欲明白本篇 html徹底剖析 之標記分類,請看 標記一覽 也請先明白圍堵標記與空標記的分別,請看 html概念 框架概念 謂框架便是網頁畫面分成幾個框窗,同時取得多個 url。只需要 即可,面所有框架標記需要放在乙個總起的 html 檔,這個檔案只記錄了該框架如何分割 不會顯示任何資料,所以不必放入...