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 檔,這個檔案只記錄了該框架如何分割 不會顯示任何資料,所以不必放入...