c++ 內建的陣列支援容器的機制,但是它不支援容器抽象的語義。要解決此問題我們自己實現這樣的類。在標準c++中,用容器向量(vector)實現。容器向量 也是乙個類模板。
標準庫vector型別使用需要的標頭檔案:#include 。vector 是乙個類模板。不是一種資料型別,vector是一種資料型別。vector的儲存空間是連續的,list 不是連續儲存的 。
一、 定義和初始化
vector< typename > v1; //預設v1為空,故下面的賦值是錯誤的v1[0]=5;
vectorv2(v1); 或v2=v1;或vectorv2(v1.begin(), v1.end());//v2是v1的乙個副本,若v1.size()>v2.size()則賦值後v2.size()被擴充為 v1.size()。
vector< typename > v3(n,i);//v3包含n個值為i的typename型別元素
vector< typename > v4(n); //v4含有n個值為0的元素
int a[4]=; vectorv5(a,a+5);//v5的size為5,v5被初始化為a的5個值。後乙個指標要指向將被拷貝的末元素的下一位置。
vectorv6(v5);//v6是v5的拷貝
vector< 型別 > 識別符號(最大容量,初始所有值);
二、 值初始化
1> 如果沒有指定元素初始化式,標準庫自行提供乙個初始化值進行值初始化。
2> 如果儲存的式含有建構函式的類型別的元素,標準庫使用該型別的建構函式初始化。
3> 如果儲存的式沒有建構函式的類型別的元素,標準庫產生乙個帶初始值的物件,使用這個物件進行值初始化。
三、vector物件最重要的幾種操作
1. v.push_back(t) 在容器的最後新增乙個值為t的資料,容器的size變大。
另外list有push_front()函式,在前端插入,後面的元素下標依次增大。
2. v.size() 返回容器中資料的個數,size返回相應vector類定義的size_type的值。v.resize(2*v.size) 或
v.resize(2*v.size, 99) 將v的容量翻倍(並把新元素的值初始化為99)
3. v.empty() 判斷vector是否為空
4. v[n] 返回v中位置為n的元素
5. v.insert (pointer,number, content) 向v中pointer指向的位置插入number個content的內容。
還有v. insert(pointer, content),v.insert(pointer,a[2],a[4])將a[2]到a[4]三個元素插入。
6. v.pop_back() 刪除容器的末元素,並不返回該元素。
7.v.erase(pointer1,pointer2) 刪除pointer1到pointer2中間(包括pointer1所指)的元素。
vector中刪除乙個元素後,此位置以後的元素都需要往前移動乙個位置,雖然當前迭代器位置沒有自動加1,
但是由於後續元素的順次前移,也就相當於迭代器的自動指向下乙個位置一樣。
8. v1==v2 判斷v1與v2是否相等。
9. !=、<、<=、>、>= 保持這些操作符慣有含義。
10. vector::iterator p=v1.begin( ); p初始值指向v1的第乙個元素。*p取所指向元素的值。
對於const vector只能用vector::const_iterator型別的指標訪問。
11. p=v1.end( ); p指向v1的最後乙個元素的下一位置。
12.v.clear() 刪除容器中的所有元素。12.v.clear() 刪除容器中的所有元素。
c 中 的用法
c 中的 至少有以下幾種作用 1.忽略轉義字元 例如 string filename d 文字檔案 text.txt 使用 後 string filename d 文字檔案 text.txt 2.讓字串跨行 例如 string strsql select from humanresources.em...
c 中 的用法
從這個帖子開始記錄一下我學習和工作當中遇到的問題,以及解決方法等等。最經公司需要對於乙個c 做的瀏覽器外掛程式做維護,使得以前沒接觸過c 的我遇到了一大堆問題,在這記錄下c 中 的用法 是運算子中等級最高的,它分為三種 1 global scope 全域性作用域符 用法 name 2 class s...
C 中 的用法
一 字串中的用法 1。地球人都知道 c 中 字串常量可以以 開頭聲名,這樣的優點是轉義序列 不 被處理,按 原樣 輸出,即我們不需要對轉義字元加上 反斜扛 就可以輕鬆coding。如,c code?1 stringfilepath c docs source a.txt rather than c ...