STL容器要求

时间:2012-11-12 11:31:47

标签: c++ stl

标准是否要求some_container<T>::value_typeT

我在问,因为我正在考虑实现符合STL的2d动态数组的不同方法。其中一个是让2Darray<T>::value_type2Darray_row<T>或类似的东西,其中数组将作为行的集合进行迭代(稍微简化。我的实际实现允许在3个方向上迭代)

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选项。你不太可能自己写点东西。