标准是否要求some_container<T>::value_type
为T
?
我在问,因为我正在考虑实现符合STL的2d动态数组的不同方法。其中一个是让2Darray<T>::value_type
为2Darray_row<T>
或类似的东西,其中数组将作为行的集合进行迭代(稍微简化。我的实际实现允许在3个方向上迭代)
答案 0 :(得分:5)
容器要求有点时髦,因为它们实际上并未被任何通用算法使用。从这个意义上说,它并不重要。
也就是说,要求是在容器的接口上,而不是关于容器实际实例化的方式。甚至非模板类也可以符合各种要求,事实上也可以。要求是value_type
存在;它的定义完全取决于容器的实现。
答案 1 :(得分:2)
标准(c ++ 11)第23.2.1节中的表96要求容器类X
包含T
类型的对象,以便T
返回X::value_type
因此,如果您的some_container
存储T
类型的对象,则value_type
必须为T
。
答案 2 :(得分:0)
要么有嵌套容器(所以colArray<rowArray<T> >
),要么只有一个包装(2dArray<T>
),但不要试图混合它们。嵌套方法允许您一直使用STL(vector<vector<T> >
),但可能会让您感到困惑,并且不允许您使用列迭代器等,这似乎是您想要的。
This SO answer addresses using ublas,另一位建议使用Boost multi-arrays。
通常,如果可以,请选择STL或Boost选项。你不太可能自己写点东西。