标准要求some_container<T>::value_type
是T
吗?
我之所以问,是因为我正在考虑用不同的方法来实现符合 STL 的二维动态数组。其中之一是拥有2Darray<T>::value_type
或2Darray_row<T>
类似的东西,其中数组将作为行的集合进行迭代(有点简化。我的实际实现允许在 3 个方向上进行迭代)
容器要求有点古怪,因为它们实际上没有被任何通用算法使用。从这个意义上说,这并不重要。
也就是说,要求是在容器的接口上,而不是在容器的实际实例化方式上。即使是非模板类也可以符合各种要求,事实上也可以。要求是value_type
存在的;它的定义完全取决于容器的实现。
标准 (c++11) 中第 23.2.1 节中的表 96 需要一个容器类,其中包含要返回的X
类型对象。T
T
X::value_type
因此,如果您some_container
存储类型为 的对象T
,则value_type
必须为T
.
要么有一个嵌套容器(so colArray<rowArray<T> >
),要么有一个包装(2dArray<T>
),但不要试图混合它们。嵌套方法允许您一直使用 STL ( vector<vector<T> >
),但可能会造成混淆,并且不允许您使用您似乎想要的列迭代器等。
这个 SO 答案使用 ublas 解决,另一个建议使用Boost multi-arrays。
通常,如果可以,请选择 STL 或 Boost 选项。你不太可能自己写东西。