1.STL六大組件
2.STL三大組件:容器、算法、迭代器
每一個容器都有自己的迭代器,迭代器用來遍歷容器中的元素。
遍歷:不重複的進行訪問每個元素。
3.容器,迭代器,算法的初步使用。
1)先引入所需要的容器頭文件和算法頭文件
void Myprint( int val){ 算法中的回調函數,需要自己寫,
cout<< val <
}
void test(){
vector
for (int i = 0; i < 5; i++)
{
V.push_back(i+ 10);
}
vector
vector
//直接使用迭代器進行容器的遍歷
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
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
vector
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++的知識點,下面幾篇文章鏈接:
如果你想看網絡編程方面,可以查看以下幾篇文章鏈接:
喜歡我的文章的話,就關注我吧!不要只收藏和轉發哦,每天至少兩篇編程知識給大家,都是本人多年的經驗總結!
閱讀更多 cpp軟件架構獅 的文章