[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > C/C++ > 正文
標準C程式庫--標準樣版庫-串列樣版
http://home.pchome.com.tw/computer/cpp2000/ (2001-06-01 13:04:00)

過去幾年以來,C++ 程式語言的標準語言定義程序經歷了一個大改變。此標準化程序便是標準資料結構庫的產生,此程式庫通常稱為「標準樣版庫」( Standard Template Library ) 或 STL 。由於 STL 是 C++ 語言定義的一部份,因此使用 STL 的程式應該享有高度可植性,因為任何標榜支援 " 標準C++" 的編譯程式都必須提供 STL 實作。

疊代字只是一種類似指標的物件,可以用來循環存取容器中的所有元素。由於不同的演算法需要以個種不同的方式來遊歷容器,因此有各種不同的疊代子形式。標準樣版庫中的每個容器類都提供一種疊代子,適合和實作容器所用的儲存技巧配合使用。

在執行過程中,如果一個問題中的元素個數變化非常大,或者無法事先預估元素個數,則不適合採用向量資料型態。在這種情況下,連結串列資料抽象是比較恰當的選擇。連結串列的觀念是一種很自然的資料抽象,導源於一個問題中的資料結構必須維護一個群集,而群集中的元素個數無法事先預知,或者可能劇烈變化。基本上,連結串列的觀念是維護一個串連起來的集合,其串每個動態配置的鏈都儲存一個值與一個指向下一鏈的指標。如果鏈不是串列最後一個儲專資訊的容器,最簡單的形式只儲存指向第一個鏈的指標。



串列有許多型式,大略可分為四種:第一、基本型式,擁有 (1) 鏈結。第二、可同時儲取第一個鏈和最後一個鏈,(1)和(3)鏈結。第三、可以雙向遊歷串列,(1) 和 (2) 鏈結。第四、包含第二和第三類型,(1)、 (2) 和 (3) 鏈結。

當我們使用 list 串列時,必須含入 #include 

疊代子
begin    傳回一個指向起點的疊代子。

end    傳回一個指向終點的疊代子。

rbegin    傳回一個指向反轉起點的疊代子。

rend    傳回一個指向反轉終點的疊代子。

Top

宣告及初始化串列
列串和向量一樣,是用樣版實作出來的。當作樣版的型態可用標準資料型態或自訂資料型態,但自訂資料型態必須設定一個無參數建構子來初始化型態值。另外使用拷貝建構子時,樣版會使用此型態的指派運算子 ( = ) 。因此,指派運算子是否要定義可由使用者決定。

list < int > list_one ;    

list < float > list_two ( 4 , 3.2 );        //配置4個元素,初值為 3.2

list < double > list_six ( list_two );        //拷貝建構子

下列幾個成員函式可以將串列中的元素做全面或局部的調整。

insert    將元素插入串列中間。它有兩個引數分別為一個疊代子和一個值,此值會插入疊代子的位置前面。例: list_six.insert ( list_six.begin( ) , 1.34 );

assign    類似於指派運算子的函式,但比指派運算子在運用上圍更大,需要較多的參數。但是會刪除所有的元素。例:list_five.assign(12);        //將串列長度為 12 初值為 0 

swap    交換兩串列的元素。

Top

將元素放入串列
push_back    將元素從後端推入串列。

push_front    將元素從前端推入串列,例:list_seven.push_front(1.2);

Top

連接兩串列
splice    有一點類似 insert 的功能,但原串列的內容會被刪除。因為 splice 是將原串列的內容鏈,直接改成插入的地方,所以資料的位置沒有被改變。只是鏈結的位置改變而已,效率比 insert 快上許多。

merge    合兩個有序串列,此成員函式比通用演算法來得有效率,但前提是串列必須已經排序完成。

Top

刪除串列
pop_back    傳回最後一個元素,並將它從串列中刪除。

pop_front    傳回最前面一個元素,並將它從串列中刪除。

remove    刪除串列中某一個值的元素。例:list_nine.remove(4);        //刪除串列中所有資料是 4 的元素

remove_if    刪除滿足某一條件的所有值。它和 remove  函式比通用演算法更有效率。例:list_nine.remove_if(divisibleByThree);

erase    刪除兩個疊代子中間的元素。可以只指定一個疊代子,其功能為刪除此疊代子到最後一個的元素。

unique    移除所有相鄰種元素,只保留第一個元素。使用者可以利用可有可無的二元函式來取代相等比較運算子。例:list_nine.unique();

clear    刪除所有的元素。

Top

長度和大小的改變
empty    檢查元素個數是否為零個。

resize    可改變串列長度,加長或減少。加果加長的話,可以設定初值。

size    傳回容器中所儲存元素的個數。

Top

存取元素和疊代子
front    傳回容器中第一個元素。

back    傳回容器中最後一個元素。

Top

排序
sort    將元素編排成遞增順序,它所採用的是一個有效率的演算法。如果比較運算子不是< ,可以當成引數傳入函式中。例:list_twelve.sort (widgetCompare);

Top

其它
max_size    可建立元素的最大個數。

reverse    將串列中每一個元素反轉。

(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
標準C程式庫--問題例--類型 String (2001-06-01 16:10:00)
標準C程式庫--標準樣版庫-集合樣版 (2001-06-01 15:00:01)
標準C程式庫--標準樣版庫-雙頭佇列樣版 (2001-06-01 14:08:00)
標準C程式庫--標準樣版庫-串列樣版 (2001-06-01 13:04:00)
標準C程式庫--標準樣版庫-向量樣版 (2001-06-01 12:10:01)
標準C程式庫--標準樣版庫-字串樣版 (2001-06-01 11:00:00)
 

★  樊強制作 歡迎分享  ★