1. 程式人生 > >STL中的容器

STL中的容器

初始化 multiset c++ vector容器 給人 開發 amp sort函數 訪問

一、什麽是STL
STL是standart template library,標準模板庫
是HP實驗室開發的一系列軟件的統稱,從根本上說,它是一些容器和算法的集合,它是世界上很多最聰明的程序員多年的傑作
STL是標準化的組件,不用重新開發,可以直接使用,它是C++的一部分,不需要額外安裝

二、STL中有什麽
1、容器
存儲類對象的盒子
線性容器:vector、list
容器適配器:queue、stack、double queue
關系型容器:set、map
2、算法
#include<algorithm>
find sort
3、叠代器
叠代器是一個類,它實現於容器模板中
它的對象是一個指向容器中的一個元素,它實現了*運算符,給人的感覺它好像是個指針
從容器中獲取到叠代器是一個半開半閉區間,[start,end)

三、vector容器
1、特點:
a、占用的是連續的內存
b、動態的管理內存
c、支持隨機訪問(at,[])
d、支持按叠代器進行插入和刪除(insert,erase)
但只有在末尾添加和刪除時效率才最高
e、支持隨機叠代:it=it+4;

2、定義:
vector<類型> a;//創建容器
vector<類型> a(10);//創建容器並設置容量為10,並把元素初始化為0
vector<類型> a(10,1);//創建容器並設置容量為10,並設置初始值

3、返回值
v[i]、v.at(i) v.front()、v.back() 這種方式返回的是元素的引用

4、成員函數
assign
size_type capacity();//獲取容器在擴充之後的容量

iterator erase()
//元素被刪除或插入後,之前獲取的叠代器就失效了,需要重新獲取

void resize()
//改變容器的大小,可以調大(構造),也可以調小(析構)

5、支持的運算符
==、!=、>=、<=、>、<
比較兩個容器中元素的數量,順序,值是否相等
容器中存放的對象的運算符==運算符必須要重載

6、排序、查找
在vector容器中是沒有排序和查找的成員函數的
在List容器中由於這是鏈式的存儲結構所以不能使用全局的sort函數,必須自己實現
在使用sort排序時,待排序的對象必須實現出<的重載(或者給sort提供比較函數)

7、自定義類使用容器時需要實現的成員有
無參構造、拷貝構造
== <

四、set容器
集合容器,裏面的元素不會重復,它會自動排重。
使用時要實現它的==運算符。

multiset 允許有重復的數據。

pair equal_range( const key_type &key );
查找值等於key的元素信息,返回兩人個叠代器。

iterator lower_bound( const key_type &key );
查找大於等於key的第一個元素

iterator upper_bound( const key_type &key );
查找大於key的第一個元素

五、隊列
單向隊列:
back、empty、front、pop、push、size
雙向隊列:

六、List
是一種鏈式存儲結構,不能使用算法庫中的排序,只能調用自帶的排序函數。

void unique();
void unique( BinPred pr );
刪除重復的元素。

void splice( iterator pos, list &lst );
void splice( iterator pos, list &lst, iterator del );
void splice( iterator pos, list &lst, iterator start, iterator end );
從指定的位置開始合並兩個鏈表

void merge( list &lst );
void merge( list &lst, Comp compfunction );
直接合並兩人個鏈表

七、map是一種關聯式的容器
它底層以采用的是紅黑樹(有序+平衡)進行存儲的。
一個鍵值(主鍵)只能對應一個值。

multimap 多重映射
鍵值可以重復

八、priority_queue優先隊列
元素在入隊後就已經排序好了,最大值在上面。
對元素排序依靠的是 < 運算符。








STL中的容器