C++基礎知識第十天

1.STL六大組件

2.STL三大組件:容器、算法、迭代器

每一個容器都有自己的迭代器,迭代器用來遍歷容器中的元素。

遍歷:不重複的進行訪問每個元素。

3.容器,迭代器,算法的初步使用。

1)先引入所需要的容器頭文件和算法頭文件

void Myprint( int val){ 算法中的回調函數,需要自己寫,

cout<< val <

}

void test(){

vector V;

for (int i = 0; i < 5; i++)

{

V.push_back(i+ 10);

}

vector::iterator pBegin = V.begin();

vector::iterator pEnd = V.end();

//直接使用迭代器進行容器的遍歷

while (pBegin != pEnd)

{

cout << *pBegin << " ";

pBegin++;

}

cout << endl;

//模擬算法的最後一個回調函數的使用

pBegin = V.begin();

while (pBegin != pEnd)

{

Myprint(*pBegin);

pBegin++;

}

cout << endl;

//使用算法遍歷容器,並且打印出來。注意:算法的最後一個參數為回調函數,需要自己寫(所想要打印的內從容)

for_each(V.begin(), V.end(), Myprint);

cout << endl;

}

};

2)容器的分類:序列式容器和關聯式容器

序列式容器:容器元素在容器中的位置由元素進入容器的時間和地點來決定。如:(vector,deque , list, stack, queue )

關聯式容器:容器具有自己的規則,元素在容器中的位置由容器的規則來定。如(樹狀容器: set/mutilset; map/mutilmap )

3)每個容器都有自己的迭代器,由容器自己提供。

3.string 容器:

1)從 const char * 到 string 有隱式轉換;反之則沒有。

3.下標操作符: [] 和 at()方法。

兩個的區別在於:1)[] 越界程序會直接掛掉, 2)at()方法越界程序會提供錯誤信息。

4.vector 容器:

1)連續的內存空間

2)單口

3)會實現內存空間動態增長(當已有內存佔滿時);申請更大的空間,原來的空間析構,原來的迭代器會失效。

4)它的內存空間不會隨著 clear()方法清除數據而消失的,只有當容器生命週期結束時,它的容量才會釋放;

"所以當想在生命週期存在時減少或增大容器內存,可以使用 swap() 方法。"(如下)

void test04(){

vector v;

for (int i = 0; i < 100000; i++){

v.push_back(i);

}

cout << "capacity:" << v.capacity() << endl;

cout << "size:" << v.size() << endl;

v.resize(3);

cout << "capacity:" << v.capacity() << endl; "注意容量與長度不一樣,"

cout << "size:" << v.size() << endl;

//收縮內存

//vector(v).swap(v);

vector(v).swap(v); //匿名對象

cout << "capacity:" << v.capacity() << endl;

cout << "size:" << v.size() << endl;

}

5)reserve的使用:"預留空間",在此空間還沒有初始化時是不允許訪問。可以通過push_back()插入元素後,進行訪問。

6)resize的使用:開闢空間並且初始化,它的空間申請完後是可以訪問的。

重新指定容器的長度為num,若容器變長,則默認值或指定值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除,"只是長度變短,但是容器的容量沒有變化,"。

7)只要容器的容量產生變化,原來的迭代器就會失效。(如刪除元素之後,原來的迭代器就不能用了)。

5.迭代器的注意事項:

1)"(當內存由於動態增長,更換地址後,原來的迭代器就失效了,不可以再使用)。"

2)只要能遍歷容器中所有元素的,都是容器認可的迭代器。

3)每個容器的迭代器不一樣,有自己的獨立迭代器。

4) const_iterator 只讀

reverse_iterator 逆序迭代器

iterator 最普通的正向迭代器

5)

6.迭代器的種類:5種。

1)每個容器只提供一種

2)都是由對應的容器自己提供的迭代器。(因為每個容器的實現機制不一樣)。

3)輸入迭代器,輸出迭代器,前向迭代器,雙向迭代器,隨機訪問迭代器

6.vector 申請和釋放空間的注意:

儘量不要頻繁申請和釋放空間(太浪費時間);可以先預測一下所用空間的大小,直接用reserve()申請足夠大的空間,在逐步初始化。

7.隨機迭代器:(vector容器支持隨機訪問)

8.deque 容器:

1)是一種雙向開口,動態以分段連續內存空間組合而成,隨時可以增加一塊新內存的容量器。

2)可以在首尾兩端分別作元素的刪除和插入操作。

3)

如果想查看之前的C++的知識點,下面幾篇文章鏈接:

如果你想看網絡編程方面,可以查看以下幾篇文章鏈接:

喜歡我的文章的話,就關注我吧!不要只收藏和轉發哦,每天至少兩篇編程知識給大家,都是本人多年的經驗總結!


分享到:


相關文章: