有什麼是執行下面的迭代器的最好辦法一個簡單的問題:C++迭代器和繼承
說我有一個模板化基類「目錄」和兩個子類「ListImpl1」和「ListImpl2」。基類的基本要求是迭代,即我可以這樣做:
for(List<T>::iterator it = list->begin(); it != list->end(); it++){
...
}
我還想允許迭代器除了如:
for(List<T>::iterator it = list->begin()+5; it != list->end(); it++){
...
}
所以問題是,迭代器的實施ListImpl1將不同於ListImpl2。我通過使用包含ListIterator的包裝器來解決這個問題,該包裝器包含一個ListIteratorImpl指針,該指針包含ListIteratorImpl2和ListIteratorImpl2子類,但這一切都變得非常混亂,尤其是當您需要在ListIterator中實現operator +時。
有關更好的設計來解決這些問題的任何想法?
爲什麼不使用['std :: advance'](http://www.cplusplus.com/reference/std/iterator/advance/)? – kennytm 2010-06-07 12:02:56
謝謝,但說我需要我提供一個更高效的操作符+而不是僅僅重複使用operator ++。據推測我仍然有同樣的問題? – user360366 2010-06-07 12:11:24
前向迭代器('std :: advance()'用於)和隨機訪問迭代器之間的區別在於前向迭代器沒有有效的「操作符+」實現(思考鏈表)。這個問題意味着一個靜態隨機訪問的迭代器,但它具有訪問的動態行爲。 – 2010-06-07 12:42:55