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)
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |