vector
1-在訪問vector內元素時,如果用下面這種方式vector
::size_type a1;//1
vector
::iterator a2;//2
vector
::const_iterator a3;//3
vector
::reverse_iterator a4;//4
vector
::const_reverse_iterator a5;//5
vector
::difference_type a6;//6
可以完成任務,但是存在乙個隱藏的危險,我們並不知道vector裡到底存放了多少個元素,有可能超過了int的範圍,所以int i 是有可能不夠的,此時,最好將i定義成size_type型別,如下:for(int i = 0; i
< a.
size(); ++i)
cout << a[i]
<< endl;
2-vector的迭代器iterator,迭代器是所有順序容器的類似於指標類的索引,可以利用迭代器訪問容器中的元素,如下:for(vector
::size_type i = 0; i < a.size(); ++i)
cout
<< a[i] << endl;
vector
a;a.push_back(10);
a.push_back(20);
a.push_back(30);
vector
::iterator firsta = a.begin();
vector
::iterator enda = a.end();
cout
<< "正序"
3-const_iterator常量迭代器,只適用於const vector表示這個容器只能訪問不能做增刪改操作,要訪問常向量容器,只能用此迭代器,如下:
const
vector
ca; //資料不能改
ca.push_back(10); //錯誤
ca.push_back(20); //錯誤
ca.push_back(30); //錯誤
const
vector
ca(a); //通過
for(vector
::const_iterator iter = ca.begin();
iter != ca.end();
++iter)
4-reverse_iterator 反向迭代器,反序訪問順序容器
vector
::reverse_iterator rfirsta = a.rbegin();
vector
::reverse_iterator rlasta = a.rend();
while(rfirsta != rlasta)
注意:a.rbegin()指向向量容器的最後乙個元素,a.rend()指向向量容器的第乙個元素的前乙個位置,當逆序訪問元素時,要將迭代器自增,因為對反向迭代器來說從a.rbegin()到a.rend()就是遞增的過程,不是遞減。
5-const_reverse_iterator常量逆迭代器
6-difference_type 迭代器位置之差,能得到兩個迭代器標記的為之間元素的個數,如下:
//10,20,30
vector
::iterator firsta = a.begin();//第乙個位置
vector
::iterator enda = a.end();//最後乙個元素的下乙個位置
vector
::difference_type dif ;//差
dif = enda - firsta;
cout
<< dif--enda;
dif = enda - firsta;
cout
<< dif--enda;
dif = enda - firsta;
cout
<< dif
順序容器 vector
一 底層實現 vector就是動態陣列.它也是在堆中分配記憶體,元素連續存放,有保留記憶體,如果減少大小後,記憶體也不會釋放.如果新值 當前大小時才會再分配記憶體.它擁有一段連續的記憶體空間,並且起始位址不變,因此它能非常好的支援隨即訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和...
順序容器vector
vector的關鍵在於其對大小的控制以及重新配置時的資料搬移效率。由於vector維護的是乙個連續線性空間,所以不論元素類別,普通指標都可以作為vector的迭代器而滿足必要條件,包括隨機訪問 操作符 等操作行為。vector提供的是random access iterators。typedef v...
順序容器 vector
vector與array非常相似,唯一的區別在於靈活性,陣列是靜態空間,一旦定義就不能改變,變大變小都需要客戶端自己重新配置新的空間,然後將元素從舊址搬到新址,再把原來的空間還給系統。vector是動態空間,隨著元素的加入,他的內部機制會自行擴充空間以容納新元素。1.vector的底層實現 vect...