標準是否要求some_container<T>::value_type
是T
?STL容器必需品
我在問,因爲我正在考慮實現符合STL的2d動態數組的不同方法。其中之一是有2Darray<T>::value_type
是2Darray_row<T>
或類似的東西,其中數組將迭代作爲行集合(稍微簡化。我的實際實現允許迭代在3個方向)
標準是否要求some_container<T>::value_type
是T
?STL容器必需品
我在問,因爲我正在考慮實現符合STL的2d動態數組的不同方法。其中之一是有2Darray<T>::value_type
是2Darray_row<T>
或類似的東西,其中數組將迭代作爲行集合(稍微簡化。我的實際實現允許迭代在3個方向)
容器的要求有點時髦因爲它們實際上不被任何通用算法使用。從這個意義上講,這並不重要。
也就是說,需求是在容器的接口上,而不是容器如何實際實例化。即使非模板類也可以符合各種要求,事實上也是如此。要求是value_type
存在;它的定義完全取決於容器的實現。
表96在標準(C++ 11)§23.2.1需要含有T
類型的對象返回T
爲X::value_type
一個容器類X
。
因此,如果您的some_container
存儲T
類型的對象,那麼value_type
必須是T
。
要麼有一個嵌套容器(所以colArray<rowArray<T> >
)或有一個包裝(2dArray<T>
),但不要嘗試混合它們。嵌套的方法允許你一直使用STL(vector<vector<T> >
),但可能會令人困惑,並且不允許你使用列迭代器等,你似乎想要。
This SO answer addresses using ublas,另一個建議使用Boost multi-arrays。
通常,如果可以的話,請選擇STL或Boost選項。你不太可能自己寫一些東西。
實際上,如果你想聲明你的模板是「容器」,那麼它可能是因爲你想將它傳遞給一些通用代碼,它將容器模板作爲模板模板參數,或者它只是一個縮寫定義。在前一種情況下,您可以查看泛型代碼*實際需要的名稱,而在後一種情況下,您可以完全記錄模板(特別是確保其迭代器真的是迭代器,因此它們可以使用標準算法),但如果您有疑問,就不要將它稱爲容器:-) –
「來縮寫定義」 - 我的意思是縮寫文檔,對不起。 –