2016-12-01 88 views
2

根據cppreference.com如何編寫STL兼容的容器,但其大小未知?

任何符合STL-容器必須提供一個成員函數size()

現在我必須寫一個兼容STL-容器MyContainerMyContainer::iterator是一種類型的std::input_iterator,即,MyContainer只能穿過一個通。例如,我使用MyContainer來存儲SQL查詢的結果,並使用它的iterator逐一記錄這些記錄。

我遇到了這樣一個問題:MyContainer可以提供begin()end()來遍歷它的值,但不能預先確定它的值的總大小。

在這種情況下我應該怎麼做?

+4

這不是一個容器,在這種情況下,你應該考慮迭代器而不是容器。這應該不是真正的問題,因爲大多數標準函數使用迭代器而不是容器。 – Holt

+0

您需要'流'而不是容器。你可以從基於std :: istream的解決方案開始。 – Arunmu

+0

'stream'是面向字符的解決方案,不適合我的問題。我認爲。 – xmllmx

回答

2

C++標準中容器「要求」有些混亂。雖然對迭代器的要求是真正的要求(例如,標準算法期望迭代器將具有由需求定義的某些屬性),但標準庫中沒有任何內容依賴於滿足「容器要求」的任何容器。實際上,這些要求是關於標準中定義的特定容器的設計陳述,而不是要求不符合它們的要求會破壞代碼。

將容器看作是通過一系列值提供迭代器的一種方式。這很重要,但它不是創建有用迭代器的唯一方法。例如,輸入流不是容器(通常沒有確定其大小的方法),但它們確實提供了可以傳遞給標準算法的迭代器(形式爲istream_iterator)。這沒什麼錯。去做就對了。