STL中 vector 和 list 一些特性


 

STL中的vector特點是: 其容量在需要時可以自動分配,本質上是數組形式的存儲方式。即在索引可以在常數時間內完成。缺點是在插入或者刪除一項時,需要線性時間。但是在尾部插入或者刪除,是常數時間的。

 

STL的 list 是雙向鏈表:如果知道位置,在其中進行插入和刪除操作時,是常數時間的。索引則需要線性時間(和單鏈表一樣)。

 

以下是vector和list中常用的方法:

 

int size() const  ;  返回容器內所有元素的個數。

void  clear()  ;    刪除容器中所有元素。

bool  empty() ;    判斷容器是否為空,如是,則返回true,否則返回false。

 

vector 和 list 都支持在常量的時間內在容器的末尾添加或者刪除項,vector和list都支持在常量的時間內訪問表的前端的項,操作如下:

 

void push_back( const Object & x)  ; 在容器的末尾添加x。

void pop_back() ; 刪除容器的末尾對象。

const  Object & back() const ; 返回表的末尾的對象。

const Object & front() const ; 返回表的前端的對象。

 

list(雙向鏈表) 中獨有的方法,可以在容器的前端進行改變:

 void push_back(const Object & x) ; 在list的前端添加x。

 void pop_front() ;在list前端刪除對象。

 

vector 中獨有的高效索引方法:

Object & operator[ ] (int idx)  ,使用[ ]索引某個位置的元素,不包含邊界檢測。

Object & at (int idx) , 返回vector中idx索引位置的對象,包含邊界檢測。

int capacity( ) const ; 返回vector 內部的容量。

void reserve(int new Capacity): 設定vector的新容量,如果有對vector容量的良好估計,可以避免對vector擴展。

 

STL中的vector特點是: 其容量在需要時可以自動分配,本質上是數組形式的存儲方式。即在索引可以在常數時間內完成。缺點是在插入或者刪除一項時,需要線性時間。但是在尾部插入或者刪除,是常數時間的。

 

STL的 list 是雙向鏈表:如果知道位置,在其中進行插入和刪除操作時,是常數時間的。索引則需要線性時間(和單鏈表一樣)。

 

以下是vector和list中常用的方法:

 

int size() const  ;  返回容器內所有元素的個數。

void  clear()  ;    刪除容器中所有元素。

bool  empty() ;    判斷容器是否為空,如是,則返回true,否則返回false。

 

vector 和 list 都支持在常量的時間內在容器的末尾添加或者刪除項,vector和list都支持在常量的時間內訪問表的前端的項,操作如下:

 

void push_back( const Object & x)  ; 在容器的末尾添加x。

void pop_back() ; 刪除容器的末尾對象。

const  Object & back() const ; 返回表的末尾的對象。

const Object & front() const ; 返回表的前端的對象。

 

list(雙向鏈表) 中獨有的方法,可以在容器的前端進行改變:

 void push_back(const Object & x) ; 在list的前端添加x。

 void pop_front() ;在list前端刪除對象。

 

vector 中獨有的高效索引方法:

Object & operator[ ] (int idx)  ,使用[ ]索引某個位置的元素,不包含邊界檢測。

Object & at (int idx) , 返回vector中idx索引位置的對象,包含邊界檢測。

int capacity( ) const ; 返回vector 內部的容量。

void reserve(int new Capacity): 設定vector的新容量,如果有對vector容量的良好估計,可以避免對vector擴展。

 

 1 #include <vector> 
 2 #include <list>
 3 #include <iostream>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     vector<int>  v1(10,22);     // 創建一個大小為 10的vector,初始化所有元素為 22 
10     list<int>  l1;
11     for(int i = 0; i < 10; i++)  // 創建並初始化一個list  
12     {
13         l1.push_back(i);
14     }
15     
16     // 打印 v1 和 l1 的大小 
17     cout<<"The size of v1: "<<v1.size()<<", "<<"the size of l1: "<<l1.size()<<endl;
18     
19     //打印出 v1 
20     
21     cout<<"v1: ";
22     for (int i = 0 ; i < v1.size(); i++)
23     {
24         cout<<v1[i]<<" ";
25     }
26     cout<<endl;
27     
28     // 打印出 l1 
29     cout<<"l1: ";
30     for (list<int>::iterator iter = l1.begin(); iter != l1.end(); iter++)
31     {
32         cout<<*iter<<" ";    
33     } 
34     cout<<endl;
35     
36     // 在 v1 末尾添加一項,在 l1 末尾 和頭部 各添加一項
37     
38     v1.push_back(333);
39     l1.push_back(111);
40     l1.push_front(222);
41     
42     // 打印v1 
43     
44     cout<<"v1: ";
45     for (int i = 0 ; i < v1.size(); i++)
46     {
47         cout<<v1[i]<<" ";
48     }
49     cout<<endl;
50     
51     // 打印出 l1 
52     cout<<"l1: ";
53     for (list<int>::iterator iter = l1.begin(); iter != l1.end(); iter++)
54     {
55         cout<<*iter<<" ";    
56     } 
57     cout<<endl;
58      
59     // 使用 at 訪問 v1 中的元素,如果超出下標范圍,會報錯。 
60     
61     cout<<"v1.at(10): "<<v1.at(10)<<endl; 
62     
63     // 返回v1 的capacity 
64     cout<<"v1.capacity(): "<<v1.capacity()<<endl; 
65     
66     // 使用 reserve 改變 v1 容量
67     v1.reserve(26);
68     cout<<"After reserve ,v1.capacity(): "<<v1.capacity()<<endl; 
69     return 0;
70 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM