C 順序容器類 向量類 列表類和雙端佇列類

2021-08-04 21:43:01 字數 2217 閱讀 2391

順序容器:包括向量(vector)、列表(list)和雙端佇列(deque)。vector類和deque類是以陣列為基礎的,list類是以雙向鍊錶為基礎的。

與陣列不同,vector的記憶體用盡時,vector自動分配更大的連續記憶體區,將原先的元素複製到新的記憶體區,並釋放舊的記憶體區。這是向量類的優點。

記憶體分配由分配子(allocator)完成。分配子也是類,它運用了new和delete運算子,本教材不作進一步討論。

◆ 2、向量類的迭代子:每個容器都有自己所支援的迭代子型別,迭代子決定了可採用哪種演算法。vector支援隨機訪問迭代子,具有最強的功能。vector的迭代子通常實現為vector元素的指標。所謂選擇容器類,實際上很大部分是選擇所支援的迭代子。

◆ 3、向量容器的宣告例

#include

……vectorvi;

//定義存放整形序列的向量容器物件vi,長度為0的空vector

vectorvf; //存放實型序列的向量容器

vectorvch; //存放字串行的向量容器

vectorvstr; //存放字串序列的向量容器

◆ 4、向量容器的建構函式

vector(size_t n);

//構造乙個有n個元素的向量,每個元素都是由預設的建構函式所建立的

vector(size_t n,t& v);

//t表示向量的基本型別,如int;為每個元素用同乙個物件v來賦初值

vector(first,last);

//元素的初值由區間[first,last)指定的序列中的元素複製而來

vector(vector& x)

//複製建構函式

這些建構函式還可以顯式給出分配子(allocator)物件。

◆ 5、對向量的操作包含了第六章在順序表中所列出的操作,甚至更豐富。每種操作都是成員函式。對使用者自定義的元素類,要過載「= =」和「<」等比較運算子。

【例11.2】尋找vector容器元素。(檢視原始碼)

◆ 6、特殊型別迭代子:*它們本身也具有五種四級迭代子屬性之一。

反轉型迭代子(reverse iterator):它是把一切都顛倒過來。正向遍歷乙個第一類容器時,如果用了反轉迭代子,實際上實現的是反向遍歷。

插入型迭代子(insertion iterator):當用普通輸出迭代子來產生乙個元素序列時,一旦新增一些元素就得完全重寫。例如普通輸出迭代子可以把乙個向量a的內容複製到另乙個向量b中,複製可以從向量b任一元素開始,向量b對應位置上的元素被覆蓋,相當於改寫。插入迭代子則可以新增元素,複製時它可以把向量a插入到向量b任一位置。同乙個copy()演算法用不同型別迭代子,結果是不同的。

流迭代子(stream iterator):包括輸入流迭代子(istream_iterator)和輸出流迭代子(ostream_iterator)

【例11.3】用istream_iterator從標準輸入讀入乙個整數集到vector中。(檢視原始碼)

列表類是由雙向鍊錶組成的。它有兩個指標域,可以向前也可以向後進行訪問,但不能隨機訪問,即支援的迭代子型別為雙向迭代子。列表類不能使用下標運算子。它定義在標頭檔案中。

列表類容器也有多種建構函式,與向量類形式相同。

【例11.4】展示列表類怎樣進行鍊錶操作。(檢視原始碼)

在本例中建立了兩個已排序好的列表類物件,然後歸併。全部用列表類的成員函式。不能使用泛型演算法sort()對無序的列表類物件排序,因為sort()要求隨機迭代子,list僅支援雙向迭代子。

雙端佇列允許在佇列的兩端進行操作。它以順序表為基礎,所以能利用下標提供有效的索引訪問,它支援隨機訪問迭代子。使用雙端佇列,必須包含標頭檔案。

雙端佇列類容器也有多種建構函式,與向量類或列表類形式相同。

【例11.5】雙端佇列類與向量類一樣,有乙個成員函式insert(),注意不是插入迭代子介面卡函式insert()。本例演示該函式的使用,最後輸出字串:「stl功能強使用方便。」(檢視原始碼)

deque類過載了多個成員函式insert():

insert (it,x);

//在迭代子it指定元素前插入乙個值為x的元素,返回指向新元素的迭代子

insert (it,n,x);

//在迭代子it指定元素前插入n個值為x的元素

insert (it,first,last);

//在迭代子it指定元素前插入由區間[first,last)指定的序列

C 順序容器 STL list類

1 例項化std list物件 include lista 2 在list開頭插入元素 a.push front 2 3 在list末尾插入元素 b.push back 100 4 在list中間插入元素 iter a.begin iter a.insert iter,10 iter a.inser...

雙端佇列(qeque容器類) include

deque 讀音 deck,意即 double queue 容器類與vector類似,支援隨機訪問和快速插入刪除,它在容器中某一位置上的操作所花費的是線性時間。與vector不同的是,deque還支援從開始端插入資料 push front 此外deque也不支援與vector的capacity re...

C 實現矩陣類和向量類

c 期末作業內容,寫完之後覺得過於臃腫,又重新搞了個新的。新的當作業交,舊的拿來給同學參考。問題描述 請仿照複數類,設計乙個矩陣類,設計矩陣類的構成元素 1.編寫建構函式完成初始化 2.編寫成員函式,讀入乙個矩陣,輸出乙個矩陣 3.編寫成員函式,計算兩個矩陣相加 相減 點乘 4.編寫成員函式,利用運...