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 }