變長一維數(shù)組,連續(xù)存儲內(nèi)存塊,保留內(nèi)存,堆內(nèi)存分配;
支持[]操作,高效隨機(jī)訪問;
添加元素時,一般不需要分配內(nèi)存空間,速度快;在中間或開始操作元素時,內(nèi)存復(fù)制效率低;
vector高效的原因是配置的內(nèi)存比所容納的元素多,重新配置內(nèi)存需要很多時間;
注:需要高效的立即訪問,而不是插入和刪除vector。
2、list
雙向鏈表,內(nèi)存空間可能不連續(xù),無保留內(nèi)存,堆內(nèi)存分配;
不支持隨機(jī)訪問,開始和結(jié)束元素訪問時間快,其他元素O(n);
插入和刪除元素在任何位置都比較快,java視頻教程的插入和刪除不會使其他元素的每一個pointer,reference,iterator失效;
注:大量插入和刪除,并立即訪問list。
3、deque
雙端隊列在堆上分配內(nèi)存,一堆間用指針連接幾個元素;
支持[]操作,快速插入和刪除元素,慢慢插入和刪除元素,如list和vector的結(jié)合;
注:注意插入和刪除,并立即存取折中使用deque。
4、set&multiset
按照給定的排序規(guī)則(默認(rèn)按)有序集合,存放平衡二叉樹less排序)對set排序中的數(shù)據(jù);
set重復(fù)元素不允許,multiset中間運(yùn)行重復(fù)元素;
不支持直接訪問元素的操作;
搜索元素更快,因?yàn)樗亲詣优判颍?/p>
元素值不能直接改變,否則會打亂原有的正確順序,必須先刪除舊元素,再插入新元素。
5、map&multimap
字典庫,一個值映射成另一個值,并按照給定的排序規(guī)則存儲平衡二叉樹map中的key排序值;
map中的key不允許重復(fù),multimap中的key允許重復(fù);
根據(jù)已知的key值搜索元素快;
插入和刪除操作緩慢。