11/7/1 Vector(1)

STL:標準模板庫。包括:標準類,函數模板

六術語:

1.容器:用來存儲和組織其他對象的對象。

       例如:鏈表類,又如:vector容器

             優點:自動管理內存

共有六種容器:

vector , deque , list , map , set , bitset

2.容器適配器

包裝了現有STL模板,實現更加的功能

例如:queue 和 stack

3.迭代器

行爲與指針相似,類型是    容器<>::iterator

  1. 分爲:

    輸入(只讀)輸出(只寫)迭代器,前向迭代器,雙向迭代器,隨機訪問迭代器

4.算法

函數模板,操作迭代器提供的對象

頭文件有 ,

5.函數對象

重載()運算符,實現 operator()()的函數

謂詞:返回 bool 類型值得函數。分爲兩類:單操作數 和 雙操作數

頭文件

6.函數適配器

 


 

矢量容器 使用實例:

涉及的幾個函數:

1.begin() 返回指向第一個元素的迭代器

2.end()  返回指向最後一個元素的下一個位置的迭代器

3.rbegin() 返回指向最後一個元素的迭代器,類型 reverse_iterator

4.rend() 返回指向第一個元素的下一個位置的迭代器,類型同 rbegin(),

   特別注意 對象.rend()-1 指向矢量的第0號元素,

   理解:將 rend 當做 begin 來理解,只是rend 指向 begin 的前一位

 

   1:  #include 
   2:  #include
   3:   
   4:  using namespace std;;
   5:   
   6:  int main()
   7:  {
   8:      vector<int> mydata;
   9:      mydata.push_back(25);//在矢量尾增加一個元素,參數爲元素的值
  10:      cout<'/t'<//越界不檢查[1]<[0]<<
  11:   
  12:   
  13:      vector<int> mydata1(100);
  14:      cout<'/t'<'/t'<//默認初始化爲0,[100]<[99]<<[0]<<
  15:   
  16:   
  17:      vector<int> mydata2(10,-1);
  18:      cout<'/t'<'/t'<//構造時,第二個參數爲默認初始值[10]<[9]<<[0]<<
  19:   
  20:      vector<int> mydata3;
  21:      mydata3.reserve(10);//不初始化?使用原來內存的內容?
  22:      cout<[0]<
  23:   
  24:   
  25:      int a[]={0,1,2,3,4,5,6};
  26:      vector<int> mydata4(a,&a[6]);
  27:      //必須用兩個指針初始化矢量, 第二個參數指向要使用的最後一個元素的下一個元素,&a[6] 可以用 a+6代替
  28:   
  29:      cout<'/t'<[6]<[5]<<
  30:      vector<int> mydata5(mydata4.begin(),mydata4.end());//end()指向最後一個元素的下一個元素
  31:   
  32:      vector<int> mydata6(mydata4.rbegin(),mydata4.rend());
  33:      //rbegin將返回指向最後一個元素的迭代器,rend將返回指向第一個元素的下一個位置的迭代器,這兩種迭代器均稱爲逆向迭代器
  34:      
  35:   
  36:      
  37:      return 0;
  38:  }

對以上代碼的一些備註:

1.VC6.0中不進行越界檢查,但在VS2008中要進行越界檢查的,以上程序在VS2008中可以運行,但程序會崩潰

2.VS2008中編譯通過,但在VC6.0中使用 rbegin 和 rend 初始化的 mydata6 編譯不通過

3.VS2008中,未初始化的矢量也不能訪問,會報錯 “矢量下標越界”vector subscript out of range

  但在VC6.0中卻可以正常訪問

  reserve()函數該如何使用呢?如何進行初始化?

發佈了36 篇原創文章 · 獲贊 35 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章