2013-06-28 91 views
1

我喜歡編寫容器不可知的代碼,在我的代碼中使用std方法,如std::distance()std::advance()。這對於反序列化很有用,我可以傳入不同類型的緩衝區對象(網絡流,字節流......)。C++創建char *迭代器

如何將char*uint8_t*指針轉換爲迭代器?將數據複製到緩衝區不是一種選擇。

我想到的一個選擇是使用std::string的自定義分配器,但我更願意提供更現成的解決方案(如果可用)。
有什麼建議嗎?

+5

指針*是*迭代器 - 最常用的甚至是*隨機訪問*。 – Xeo

+0

指針是迭代器。只要注意正確處理'end()' – towi

回答

3

有幾種類型的迭代器,由(他們支持的功能)是什麼性質,他們有規定 - 這裏有一個很好的概述http://www.cplusplus.com/reference/iterator/

隨機訪問迭代器需要實現所有在該表中看到的迭代器功能。

原始指針實際上支持所有的操作,因此隨機訪問 運算符 迭代器,可用於所有STL算法和容器。這裏還討論Can raw pointers be used instead of iterators with STL algorithms for containers with linear storage?

儘管沒有必要,但爲您的指針實現迭代器包裝可能仍然有用 - 這也在上述問題的答案中討論。

+0

謝謝,這回答了我很多問題。 – genjix

+0

[cppreference](http://en.cppreference.com/w/cpp/iterator)的迭代器頁面也可能有用。不太友善,但往往更可靠。 – Yakk

3

沒關係。這些指針無論如何都是作爲迭代器工作的,因爲它們實現了基本的功能。