1. 程式人生 > >如何理解c++叠代器(上)

如何理解c++叠代器(上)

stl源碼 str 抽象 ice ive 左值 arc 統一 為什麽

1、如何理解叠代器?叠代器不是指針,也似乎不是string這種類型

參考:叠代器與指針的區別是? C++map叠代器的++操作是如何實現的?討論。iterator提供了遍歷STL容器裏元素的方式,not-only-read,還可以修改這些元素,如賦值,這需要解引用操作返回的是元素的左值引用。

考慮pointer遍歷數組和鏈表,前者p++,後者p=p->next,而iterator提供了抽象的統一操作iterator++。STL裏的各種容器實現細節不一樣(內存管理不一樣,如string就有三種實現方式),如果用指針去遍歷,需要像容器的實現者那樣了解各種細節,訪問形式也是不一致。所以叠代器提供了更直觀更好用的方式 acess elements in Containers。

2、forward_list的叠代器為什麽和vector的叠代器不一樣?見c++ primer 5th

類比指針的算術運算,叠代器需要支持的操作?++、--、*、+n、-n、=、==、!=。forward_list的叠代器不支持+n操作,因為這提供了對元素的隨機訪問能力,而前向鏈表實現的是單鏈表的功能,所以不能提供。iterator、叠代器的五種類型、隨機訪問叠代器。

3、如何實現一個叠代器,如果自定義了容器類型,需要完成那些工作STL自帶的叠代器能訪問元素?

為什麽C++ STL的叠代器要嵌套在容器之中?因為容器的實現方式不一樣。

自定義一個容器類,如何引入叠代器機制?define iterator?具體叠代器的實現可參考《STL源碼剖析》。

如何理解c++叠代器(上)