在我所看到的介紹stl的幾本書和文章裡。開頭總要說stl能節省大量的時間和精力,但很多c++程式設計師確不知道,不會用,或不願意用,因為覺得stl不好理解,不好用,複雜。可能也正如這些書中所說,我也經歷過從不用到用的過程,而我身邊也有人還沒有使用stl。但其實只要我們需要儲存資訊,然後查詢這些資訊並使用,而且需要有一定形式的儲存,並需要一定形式的獲取這些儲存的資訊時,stl還真是乙個不錯的選擇。因為它把一些常用的資料結構寫成了很標準的模板。這樣我們就不必自己再去實現一些資料結構了。
先說說容器。容器乙個很形象的名稱,就是一些用於儲存資料集合的通用資料結構。 容器包括順序容器(vector、deque、list),容器介面卡(queue、priority_queue、stack),關聯容器(pair工具類、map、multimap、set、multiset),其他容器(陣列、string、流和bitset)。當需要選用時,我覺得主要從兩個方面考慮,乙個是這個容器提供了什麼方法,如是如何儲存乙個資料,是如何找到乙個儲存的資料,而這些方式是不是你所需要的形式;再乙個就是看查詢乙個儲存的資料,刪除乙個資料用多長時間。當然如果對效率沒有要求,那就看第一點了,只要這個容器提供的方法方便就可以選用它。那麼我也從這兩個角度總結容器的使用,簡單歸納如下:
一、vector(向量):它類似乙個陣列,元素儲存在一段連續的記憶體中,在標頭檔案中定義為乙個帶有兩個型別引數的類模板:乙個是在向量中儲存的元素的型別,另乙個是分配器型別(此模板引數有預設值,一般可以不指定):
template > class vector;
1。通常的用法就是:
vectordvector(10);
double dtest = 2.3;
dvector.push_back(dtest);//還可以在放入其他數
double dres = 0;
dres = dvector[3];
vectornvector;
nvector.push_back(1);
nvector.push_back(5);
nvector.push_back(2);
nvector.push_back(8);
nvector.insert(nvector.begin()+2, 4);
nvector.erase(nvector.begin()+1, nvector.begin()+3);
此外,向量還提供at(),front()和back()等方法訪問vector的元素;提供通常的6個過載比較操作符:==、!=、<、>、<=和》=;提供size和capacity方法得到其大小的資訊;提供reserve預先分配空間,提供popback刪除乙個元素,提供clear清空向量。
2。向向量插入和從向量刪除元素一般都需要線性時間,不過,有些操作實際上可以在
vector
最後位置上以攤分常量時間完成。隨即訪問單個元素的複雜性都為常量時間
。如果需要快速訪問元素,但不打算經常增加或刪除元素,就應當選用向量。
3。要注意的是不提供越界檢查,使用方法at()提供越界檢查;此外,vector類的複製建構函式和賦值操作符會對向量中所有元素完成深複製,所以為了提高效率,應當按引用或const引用向函式或方法傳遞vector。
4.向量很像陣列,但之所以有這樣的乙個容器,可能在於它能動態增長,這是陣列不能做到的,也是需用vector的乙個重要理由。
5。有關以迭代器方式訪問向量,在單獨總結
STL容器用法與介紹之vector
a vector是乙個封裝了動態大小陣列的順序容器,並支援反轉 b vector是在堆上分配記憶體,並在記憶體中具有連續的儲存空間,它提供了自動記憶體管理功能,隨著元素的增加或刪除,記憶體會同步進行增大或縮小 c 訪問vector中的元素可以通過元素下標實現隨機訪問,也可以通過迭代器實現順序訪問 d...
C 11 14之STL迭代器用法及概述
迭代器是乙個可遍歷stl容器全部或部分元素的物件 行為類似於指標的物件 迭代器是用來表現容器中某一位置 迭代器緊密依賴於容器,容器裡定義者迭代器具體型別細節。迭代器和容器緊密相關 繫結到一起的 分類依據 迭代器的移動特性以及在這個迭代器上能做的操作 迭代器,行為如指標,到處跳,表示乙個位置,一般分類...
STL模板和容器(1)
stl 標準模板庫 優點 1,方便,容易地實現搜尋資料或者對資料排序等一系列演算法。2,除錯程式更加安全和方便 3,跨平台。基礎概念 模板 類的巨集。泛型,乙個類的模板叫做泛型類,而乙個函式的模板也自然地被叫做泛型函式 容器 container,可以容納一些資料的模板類,例如以下幾種容器 1,vec...