程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 跟我一起學STL(2)——vector容器詳解

跟我一起學STL(2)——vector容器詳解

編輯:C++入門知識

一、引言

在上一個專題中,我們介紹了STL中的六大組件,其中容器組件是大多數人經常使用的,因為STL容器是把運用最廣的數據結構實現出來,所以我們寫應用程序時運用的比較多。然而容器又可以序列式容器和關聯式容器兩類,C++語言本身提供了一個序列式容器數組,另外STL又提供vector,list,deque等序列式容器,本專題將詳細介紹下vector容器。

二、vector詳解

2.1 vector容器介紹

vector容器的數據結構為單端數組,其操作方式與數組的操作非常相似,唯一不同的是——數組是靜態空間,一旦配置了數組大小就不能改變,而vector是動態空間,隨著元素的插入,vector類內部機制會自行擴充空間來容納新的元素,我們不需要擔心因為空間不足而一開始就申請一個空間較大的數組,使用vector更加靈活。vector與C++中數組的區別,如.NET中List<T>類與數組的區別一樣。

2.2 vector對象創建詳解

vector有8個構造函數,其8個構造函數的定義如下代碼所示:

       
 vector()
        : _Mybase()
        {    
 
     vector( _Alloc&

 vector(size_type _Count,  _Ty&
 vector(size_type _Count,  _Ty& _Val,  _Alloc&

    vector( _Myt&
        ->_Mylast =-> template< _Iter>
 template< _Iter> _Alloc&

下面演示下利用上面的構造函數來創建不同的vector對象,並輸出每個vector對象中的元素,具體演示代碼如下所示:

#include <vector><iostream>
 
    vector<>
    vector<>
    vector<> v1(
    vector<> v2(,
    vector<> v3(,
    vector<>
    vector<> v5(( index=;index<;index++=
    vector<> v6(v5.begin()+,v5.begin()+
    cout<<(v1_Iter=v1.begin();v1_Iter!=v1.end();v1_Iter++<< <<*<<
    cout<<(v2_Iter=v2.begin();v2_Iter!=v2.end();v2_Iter++<< <<*<<
    cout<<(v3_Iter=v3.begin();v3_Iter!=v3.end();v3_Iter++<< <<*<<
    cout<<(v4_Iter=v4.begin();v4_Iter!=v4.end();v4_Iter++<< <<*<<<<  ( v5_Iter = v5.begin( ) ; v5_Iter != v5.end( ) ; v5_Iter++<<   << *<<<<  ( v6_Iter = v6.begin( ) ; v6_Iter != v6.end( ) ; v6_Iter++<<   << *<<
    vector<><><<  ( v7_Iter = v7.begin( ) ; v7_Iter != v7.end( ) ; v7_Iter++<<   << *<<

上面演示代碼運行結果如下圖所示:

2.3 vector元素操作

vector類中提供了很多成員函數,下面演示下一些常用函數使用,具體演示代碼如下:

#include <vector><iostream>
  print(vector<> &(size_t i=;i<v.size();i++<<v[i]<< << region 元素的遍歷訪問
    
    vector<>
    vint.push_back(
    cout<<<<vint[]<<(size_t i=;i <vint.size();i++
        cout<<<<i<<<<vint.at(i)<< << endregion 

     region 利用erase函數刪除元素
    
    vint.erase(vint.begin()+<<<<<>
    (iter=vint.begin(),index1=;iter!=vint.end();iter++,index1++<<<<index1<<<<*iter<< << endregion 

     region 利用pop_back函數刪除尾部元素
    
<<<<<>
    (iter1=vint.begin(),j=;iter1!=vint.end();iter1++,j++<<<<j<<<<*iter1<< << endregion 

     region 反向遍歷 vector 的元素
    
    vint.insert(vint.begin()+,
    vint.insert(vint.end(),<><<<<
    (iter2=vint.begin(),k=;iter2!=vint.end();iter2++,k++<<<<k<<<<*iter2<< <<<<<<<>( riter=vint.rbegin(),index=;riter!=vint.rend();riter++,index++<<<<index<<<<*riter<< << endregion 

     region 兩個vector容器元素的交換
    
    vector<>
<<<<<<<< endregion 

上面代碼的運行結果為:

三、小結

到這裡,本專題的內容介紹結束了,vector向量容器實現為數據線性存儲的泛型類,本文介紹了使用數組下標、at()函數和迭代器方式來進行元素訪問,然後演示了一些常用函數的使用。vector尾部添加和移除元素效率非常高,但在中部或頭部插入元素和刪除元素效率較低,這與它的數據結構(線性連續存儲方式)有著密切的關系。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved