順序容器及其應用 一

2021-08-07 17:33:16 字數 3192 閱讀 6593

乙個容器就是一些特定型別物件的集合。順序容器提供了控制元素儲存和訪問順序的能力。順序是與之加入容器時的位置相對應的。

所有的順序容器都提供了快速順序訪問元素的能力,但是,這些順序容器在以下的方面都有不同的效能折中:

vector    

可變大小的陣列。支援快速隨機訪問。在尾部之外插入或者刪除元素可能很慢

deque    

雙端佇列,支援快速隨機訪問,在頭尾位置插入或者刪除速度很快

list

雙向鍊錶,支援雙向順序訪問,在list中的任何位置插入或者刪除操作都很快。 

forward_list    單向鍊錶,只支援單向順序訪問,在鍊錶中的

任何位置插入或者

刪除操作都

很快

array              固定大小的陣列,支援快速

隨機訪問,不能新增或者刪除元素。

string

與vector相似的容器,但專門用於儲存字元。隨機訪問快。在尾部插入刪除速度快

以上的容器中除了固定大小的array外,其他容器都提供了高效、靈活的記憶體管理。可以新增和刪除元素的大小,擴張和收縮容器的大小。

stringvector將元素儲存在連續的記憶體空間中,由於元素是連續儲存的,由原素的下標來計算其位址是非常快速的,但是這兩種容器中間位置新增或者刪除元素就會非常的耗時,在一次新增或者刪除後,需要移動刪除或者插入元素之後的所有元素,來保持連續儲存。而且,新增乙個元素時,可能還需要分配額外的記憶體空間,在這種情況下,每個元素都必須移動到新的儲存空間中。

listforward_list兩個容器的設計目的是令容器任何位置的新增,和刪除操作都很快速。作為代價,這兩容器不支援元素的隨機訪問。為了訪問乙個元素,只能遍歷整個容器。而且,與vector、deque和array相比,這兩個容器的額外開銷也很大。

deque是乙個更為複雜的資料結構。與string和vector類似,deque支援快速的隨機訪問。與string和vector一樣,在deque的中間位置新增或者刪除元素的代價(可能)很高。但是,在deque的兩端新增或刪除元素都是很快的,與list或forward_list新增刪除元素的速度相當。

通常,使用vector是最好的選擇,除非你有很好的理由選擇其他的容器。

下面是一下選擇容器的基本原則:

1) 如果你的程式有很多的小的元素,且空間的額外開銷很重要,則不要使用list或forward_list.

2) 如果程式要求隨機訪問元素,應使用vector或deque。

3) 如果程式要求在程式中刪除或插入元素,應使用list或者forward_list.

4) 如果程式需要在頭或者尾位置插入或者刪除元素,但不會再中間位置插入或者刪除元素操作,則使用deque。

先將數陣列中的元素加入容器中,然後進行排序,並去掉重複的部分,最後進行輸出。

#include #include #include #include using namespace std;

int array = ;

int main()

sort(vec.begin(),vec.end()); // 對容器中的元素進行排序

vector::iterator iter;

iter = unique(vec.begin(),vec.end());//找到重複的元素

vec.erase(iter,vec.end()); //刪除重複的元素

for(i = 0;i < vec.size();++ i)

cout << endl;

return 0;

}

下面是vector 與 list的區別

#include#include#includeusing namespace std;

int main()

cout << "vet[2]=" << vet[2] << endl;

//cout<< "lst[2]=" <::iterator itv = vec.begin();

list::iterator itl = lst.begin();

itv = itv + 2;

//itl = itl + 2; //編譯錯誤,list::iterator沒有過載+

itv ++;

itl ++; //list::iterator中過載了++,只能使用++進行迭代訪問。

cout << *itv << endl;

cout << *itl << endl;

return 0;

}vector擁有一段連續的記憶體空間,能很好的支援隨機訪問,

因此vector::iterator支援「+」,「+=」,「<」等操作符。

list的記憶體空間可以是不連續,它不支援隨機訪問,

因此list::iterator則不支援「+」、「+=」、「<」等

vector::iterator和list::iterator都過載了「++」運算子。

總之,如果需要高效的隨機訪問,而不在乎插入和刪除的效率,使用vector;

如果需要大量的插入和刪除,而不關心隨機訪問,則應使用list。

順序容器基本上可以儲存為任意的型別的元素。特別是,我們定義的乙個容器,其元素的型別可以是另乙個容器,這種容器的定義與任何其他的容器型別完全一樣:在尖括號中指定元素型別(此種情況下,是另一種容器的型別):

vector> vect; // 容器的容器

此時,vect是乙個vector,其元素型別是string的vector。

STL順序容器簡單應用

include include includeusing namespace std void main01 演算法和迭代器能無縫連線 int num1 count v1.begin v1.end 3 cout num1 endl 容器裝元素 class teacher void main02 容器...

實驗二 順序表及其應用

實驗目的 1 深入了解線性表的順序儲存結構。2 熟練掌握在順序儲存結構上進行插入 刪除等操作的演算法。實驗內容 1.線性表的順序儲存結構。2.順序儲存結構上進行插入 刪除等操作的演算法。實驗要求 1 定義 ilist 介面 2 定義順序表 seqlist 類 3 呼叫 seqlist 類,驗證類的定...

容器 順序容器

容器 include include include 容器元素型別必須滿足 1.支援賦值運算 2.物件可以複製 而io庫型別這兩個都不支援,因此,不能建立存放io型別物件的容器 容器的容器 記得加空格 list vector a list容器迭代器不支援演算法運算 也不支援關係運算 等,它只有自增,...