2014-12-19 126 views
0

我有任何容器不提供隨機訪問迭代器,目標是創建一個適配器,它接受輸入這樣的迭代器並向容器提供隨機訪問迭代器接口。適配器將任何迭代器轉換爲隨機訪問迭代器

我不知道如何使用boost::iterator_facade,因爲它是一個有點混亂: - /上有堆棧溢出一些例子,但我不知道如何使用它們(here

任何鏈接/例子可能是很有幫助。 (我讀的例子在boost他們有點難以消化考慮我在boost

+2

該標準要求所有的操作上一個迭代器採取攤銷不變的時間。你不能採用一個迭代器,它用'N(N)'時間來增加'N',並且神奇地把它變成一個迭代器,它需要'O(1)'時間來做同樣的事情。結果不會滿足隨機訪問迭代器的複雜性要求。 – 2014-12-19 05:34:40

+0

是否使用'std :: advance'會解決你的問題? – Anycorn 2014-12-19 05:41:01

+0

同意了,我理解迭代器和容器的設計和概念......但即使性能最差也可能實現。如果是這樣,我只想自己實現它,但我只需要任何想法/開始。謝謝! – KawKaw 2014-12-19 05:42:41

回答

1

經驗,你不希望這樣做。

要麼

  • 使用廣義範圍內庫設施做「對飛」的緩存,像埃裏克Niebler的Container Ranges concept from his Ranges proposal
  • 明確編寫的意圖,例如,通過創建一個標籤派出過載你的函數說,「具體化」的輸入範圍爲隨機訪問算法的臨時容器

如果你真的堅持,是的,你可以實現你的想法,但我不明白它會獲得什麼,除了隱藏運行時/存儲成本。尤其是,它不會是微不足道的需要,以保持一生around.¹


輕微相關:升壓靈有boost::spirit::multi_pass適配器,但只從升級到InputIteratorForwardIterator(允許回溯)。

¹(你做什麼,當你有一個臨時性的即已經是一個隨機存取範圍?你不能把對它的引用,但你也應該不必複製它。)