我以
vector
為例,總結一下
stl順序容器的基本使用。
vector
是順序容器,它在很多方面類似於我們通常使用的陣列。但是它比陣列具有很多很好的特性。它使用安全,具有陣列所不具備的自增長的特性,使得
vector
在現代軟體設計中佔據重要地位。
本講分五個部分,分別是初始化、迭代器、容器訪問、容器操作和其他內容。
說明:1
、本文均只涉及
vector
常用的知識,不求全面只求常用。
^-^2
、本文如果沒有特別宣告,則所用的容器為
vectornvec;
3一、初始化
vector
常用的初始化方法有:
1、建立空容器
vectornvec;
2、建立在迭代器範圍內的容器
vectornvec(ibegin, iend); 3
、建立n
個元素為
c的容器
vectornvec(n, c); 4
、建立有
n個值初始化的容器
vectornvec(n);
我最近想到乙個問題,
vector
好像不能像陣列一樣批量初始化。陣列可以這樣初始化:
int a = ; 但是
vector
不能類似的用
vectornvec = ;
作為乙個優秀的容器,難道
vecotr
就不具備初始化的能力嗎?
答案是可以的,我們可以這樣:
int a = ;//
先批量初始化乙個陣列
vectornvec(a, a + 5);//
利用迭代器初始化
這樣我們就能批量初始化容器了。需要注意的是,這裡的
a+5處於
a的界外。就像是
vector
的函式end()
一樣,它返回的是最後乙個元素後的位置。這裡也需要這樣。
二、迭代器
迭代器的本質就是指標。
vector
的迭代器的獲取是使用
begin()
和end()
獲取的。
迭代器支援的操作有
++, --, +, -, >, <, >=, <=, ==, !=以及*
操作。迭代器包括
iterator
和const_ iterator
。其中後者是唯讀性迭代器。
三、容器訪問
首先說明一點,容器訪問設計的操作是不修改容器內容的操作。
vector
的容器訪問有取下標操作
、迭代器的解引用*、
begin()
、end()
、size()
、empty()
、back()
、front()
、at()
等。解釋一下,
size
函式返回容器中元素的個數,
empty
函式返回容器是否為空的布林值,
back
函式返回容器最後乙個元素的引用,
front
返回容器第乙個元素的引用,
at返回下標為函式引數的元素的引用。貌似
back()
、front()
、at()
不應該放在這裡,因為它們返回的都是引用值。
begin()
、end()
返回值的型別是
vector::iterator
;size()
返回值的型別是
vector::size_type
;back()
、front()
、at()
返回值的型別是
vector::reference
。四、容器操作
插入元素:
insert()
,push_back()
,push_front()
刪除元素:
erase()
,pop_back()
,pop_front()
清空容器:
clear()
調整長度:
resize()
五、其他
vector
中包括的型別別名包括
size_type, iterator, const_iterator, reverse_iterator, const_reserve_tierator, difference_type, value_type, reference, const_reference
。以後將繼續補充,就算是我學習
stl
stl容器之順序容器
stl容器分為順序容器和關聯容器 其中順序容器最常用的由vector,list,queue 1.vector vector 向量容器,可以看作變長陣列,長度可根據需要自行變化。使用的標頭檔案 include 定義方式 vector陣列名 vectorar 訪問容器內資料的方式和普通陣列相同,可以用a...
STL順序容器 vector
vector是乙個線性順序結構。相當於陣列,但其大小可以不預先指定,並且自動擴 展。它可以像陣列一樣被操作,由於它的特性我們完全可以將vector 看作動態數 組。在建立乙個vector 後,它會自動在記憶體中分配一塊連續的記憶體空間進行資料 儲存,初始的空間大小可以預先指定也可以由vector 預...
STL順序容器 list
list是乙個線性鍊錶結構,它的資料由若干個節點構成,每乙個節點都包括乙個 息塊 即實際儲存的資料 乙個前驅指標和乙個後驅指標。它無需分配指定 記憶體大小且可以任意伸縮,這是因為它儲存在非連續的記憶體空間中,並且由指 針將有序的元素鏈結起來。由於其結構的原因,list 隨機檢索的效能非常的不好,因為...