【C++】 C++标准模板库(十二) 迭代器和STL
1. C++ Iterators(迭代器)
迭代器可被用來(lái)訪問(wèn)一個(gè)容器類的所包函的全部元素,其行為像一個(gè)指針。舉一個(gè)例子,你可用一個(gè)迭代器來(lái)實(shí)現(xiàn)對(duì)vector容器中所含元素的遍歷。有這么幾種迭代器如下:
| input_iterator | 提供讀功能的向前移動(dòng)迭代器,它們可被進(jìn)行增加(++),比較與解引用(*)。 |
| output_iterator | 提供寫功能的向前移動(dòng)迭代器,它們可被進(jìn)行增加(++),比較與解引用(*)。 |
| forward_iterator | 可向前移動(dòng)的,同時(shí)具有讀寫功能的迭代器。同時(shí)具有input和output迭代器的功能,并可對(duì)迭代器的值進(jìn)行儲(chǔ)存。 |
| bidirectional_iterator | 雙向迭代器,同時(shí)提供讀寫功能,同forward迭代器,但可用來(lái)進(jìn)行增加(++)或減少(--)操作。 |
| random_iterator | 隨機(jī)迭代器,提供隨機(jī)讀寫功能.是功能最強(qiáng)大的迭代器, 具有雙向迭代器的全部功能,同時(shí)實(shí)現(xiàn)指針般的算術(shù)與比較運(yùn)算。 |
| reverse_iterator | 如同隨機(jī)迭代器或雙向迭代器,但其移動(dòng)是反向的。(Either a random iterator or a bidirectional iterator that moves in reverse direction.)(我不太理解它的行為) |
第種容器類都聯(lián)系于一種類型的迭代器。第個(gè)STL算法的實(shí)現(xiàn)使用某一類型的迭代器。舉個(gè)例子,vector容器類就有一個(gè)random-access隨機(jī)迭代器,這也意味著其可以使用隨機(jī)讀寫的算法。既然隨機(jī)迭代器具有全部其它迭代器的特性,這也就是說(shuō)為其它迭代器設(shè)計(jì)的算法也可被用在vector容器上。
如下代碼對(duì)vector容器對(duì)象生成和使用了迭代器:
vector<int> the_vector;vector<int>::iterator the_iterator;for( int i=0; i < 10; i++ )the_vector.push_back(i);int total = 0;the_iterator = the_vector.begin();while( the_iterator != the_vector.end() ) {total += *the_iterator;the_iterator++;}cout << "Total=" << total << endl;提示:通過(guò)對(duì)一個(gè)迭代器的解引用操作(*),可以訪問(wèn)到容器所包含的元素。?
2. C++ 標(biāo)準(zhǔn)模板庫(kù)(STL)
C++ STL (Standard Template Library標(biāo)準(zhǔn)模板庫(kù)) 是通用類模板和算法的集合,它提供給程序員一些標(biāo)準(zhǔn)的數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)如 queues(隊(duì)列), lists(鏈表), 和 stacks(棧)等.
C++ STL 提供給程序員以下三類數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn):
- 順序結(jié)構(gòu)
- C++ Vectors
- C++ Lists
- C++ Double-Ended Queues
- 容器適配器
- C++ Stacks
- C++ Queues
- C++ Priority Queues
- 聯(lián)合容器
- C++ Bitsets
- C++ Maps
- C++ Multimaps
- C++ Sets
- C++ Multisets
程序員使用復(fù)雜數(shù)據(jù)結(jié)構(gòu)的最困難的部分已經(jīng)由STL完成. 如果程序員想使用包含int數(shù)據(jù)的stack, 他只要寫出如下的代碼:
stack<int> myStack;接下來(lái), 他只要簡(jiǎn)單的調(diào)用 push() 和 pop() 函數(shù)來(lái)操作棧. 借助 C++ 模板的威力, 他可以指定任何的數(shù)據(jù)類型,不僅僅是int類型.? STL stack實(shí)現(xiàn)了棧的功能,而不管容納的是什么數(shù)據(jù)類型.
總結(jié)
以上是生活随笔為你收集整理的【C++】 C++标准模板库(十二) 迭代器和STL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【C++】 C++标准模板库(十一) 优
- 下一篇: 【C++】 C++字符串类