STL背景知識(转载)

Vector

vector 是一種Sequence(可變長度的容器,元素依照線性方式儲存),支援隨機存取元素,新增 或是刪除尾端(end)的元素只要常數時間(Constant Time, O(1)),新增或刪除前端或是中間(at the beginning or in the middle)元素需要線性時間(Linear Time, O(N) ),元素的個數可以動態改變, 記憶體自動管理。是STL中最簡單的類別,在許多情況下也是最有效率的類別,適合用在陣 列大小無法事先預估的場合。

 

/*
* Copyright 2004 J.W.Liang
*/
#include <stdio.h>
#include <vector>
using namespace std;
int main(){
vector<int> container;

// 將 0~9 裝進 vector
for(int i=0;i<10;i++)
container.push_back(i);

// 隨機存取 (Random Access)
printf("6th element:%d\n",*(container.begin()+5));

// 使用 Iterator 循序存取
vector<int>::iterator it;
for(it=container.begin();it!=container.end();++it)
printf("%d ",*it);

// 另外一種方式是直接把array內容裝進vector
int array[10]={1,2,3,4,5,6,7,8,9,10};
vector<int> v2(array,array+10);
printf("\n6th element:%d\n",*(v2.begin()+5));

return 0;
}


Map

當成Hashtable使用,可以在常數時間(Constant Time)存取某個鍵值(Key)。

 
/*
* Copyright 2004 J.W.Liang
*/
#include <stdio.h>
#include <map>
using namespace std;
int main(int argc,char* argv[]){
map<int,bool> IsPrime;
//可以使用 operator [ ] 存取
IsPrime[2]=true;
IsPrime[3]=true;
IsPrime[4]=false;
IsPrime[5]=true;

// 直接存取
printf("%d is prime ? %s\n",3, IsPrime[3]?"true":"false");
//使用 Iterator 走訪 map
map<int,bool>::iterator it=0;
for(it=IsPrime.begin();it!=IsPrime.end();++it){
if(it->second)
printf("%d is a prime number\n",it->first );
else
printf("%d is not a prime number\n",it->first );
}
}


參考資料

posted on 2005-04-05 15:32  Michael Zhao  阅读(465)  评论(0编辑  收藏  举报