在我們編寫每乙個程式時,都會或多或少的需要儲存一些資料,而c++在這方面只提供了幾種最基本的方法,我們可以建立區域性變數或者全域性變數在存放某個值,也可以用陣列來存放多個值。
陣列是c++唯一支援的容器,但陣列並不適合用來解決所有的問題
假如我們編寫乙個程式:輸入一串字母,判斷與給定單詞是否一樣。
這時候我們會想到用陣列來存放,我們將不得不遍歷每乙個陣列元素並把它與給定的單詞進行比較, 這樣如此下去效率實在太低。
計算機領域的科學家們在過去的幾十年裡投入了大量的精力來為不同類別的問題尋找最合適的資料結構
於是現在在c++標準庫里有許多現成的容器,他們都是經過老一輩精心的設計和測試,可以直接拿來就用。
c++標準庫提供的向量(vector)型別從根本上解決了陣列先天不足的問題(受限於乙個固定的長度)
就像可以建立各種不同型別的陣列一樣,我們也可以建立各種不同的型別的向量:
-std::vectorvectorname;
由此,我們用不著對乙個向量能容納多少個元素做出限定,因為向量可以動態地隨著你往它裡面新增元素而無限增大
並且,你還可以用它的size()方法查知某給定向量的當前長度
下面看乙個例子vector.cpp
#include#include#includeusing namespace std;
int main()
return 0;
}
回顧剛才我們對向量示例程式的修改,別的先不說,用來遍歷向量元素的迴圈比原來複雜了許多,可**的行為還是老樣子。
迭代器的真正價值體現在它們可以和所有的容器配合使用,而使用迭代器去訪問容器元素的演算法可以和任何一種容器配合使用
那麼,下面我將帶大家再修改一下這個例子,來演示演算法的強大之處,在輸出該容器裡的元素之前,先按字母順序對它們進行排序。
#include#include#include#includeusing namespace std;
int main()
return 0;
}
容器和演算法
map和set都是c 的關聯容器,其底層實現都是紅黑樹 rb tree 由於 map 和set所開放的各種操作介面,rb tree 也都提供了,所以幾乎所有的 map 和set的操作行為,都只是轉調 rb tree 的操作行為。map和set區別在於 2 set的迭代器是const的,不允許修改元素...
C 容器和演算法
c 容器和演算法 容器部分 順序容器 vector deque list 通過元素在容器中的位置順序儲存和訪問元素 vector 支援快速隨機訪問 容器介面卡為stack後進先出棧 deque 雙端佇列 容器介面卡為priority queue有優先順序管理的佇列 list 支援快速插入 刪除 容器...
C 容器和演算法
1.map和set有什麼區別,分別又是怎麼實現的?2.stl的allocator?c 容器的空間配置器,由兩級分配器構成,大於128位元組,呼叫一級配置器,malloc free,realloc 小於128位元組,預設二級配置器,分配記憶體池。為了便於記憶體管理,減少記憶體碎片產生 3.stl 標準...