标准是否要求some_container<T>::value_type
为T
?
我问这个问题是因为我正在考虑实现STL兼容的二维动态数组的不同方法之一是让2Darray<T>::value_type
成为2Darray_row<T>
或类似的类型,其中这个数组将被迭代为一组行(有点简化,我的实际实现允许在3个方向上进行迭代)。
标准是否要求some_container<T>::value_type
为T
?
我问这个问题是因为我正在考虑实现STL兼容的二维动态数组的不同方法之一是让2Darray<T>::value_type
成为2Darray_row<T>
或类似的类型,其中这个数组将被迭代为一组行(有点简化,我的实际实现允许在3个方向上进行迭代)。
容器的要求有点奇怪,因为它们实际上并未被任何通用算法使用。从这个意义上说,这并不太重要。
尽管如此,容器的要求是针对接口而不是容器的实例化方式的。即使非模板类也可以符合各种要求,并且实际上确实符合。要求是 value_type
存在;定义取决于容器的实现方式。
X
是一个容器,其value_type
恰好是T
。并没有要求X
可以被拼写为some_identifier<T>
(对于某个标识符some_identifier
),这就是这个问题所涉及的内容。所有的陈述都只是说X
是容器名称,其元素类型是T
类型,这显然意味着X::value_type
是T
(有点自证不同) 。 - Dietmar Kühltypedef
,它们是众多签名和typedef
中的一部分。 - Dietmar Kühlstd::vector
“成为容器”,但实际上我们指的是std::vector<T>
对于所有满足容器元素要求(除了bool
)的类型T
都满足容器要求。 - Steve Jessop标准中的§23.2.1中的表96要求容器类X
包含类型为T
的对象并返回X::value_type
的T
。
因此,如果您的some_container
存储类型为T
的对象,则value_type
必须是T
。
X
和T
之间的关系(即X::value_type
是T
)。它并没有说明some_type<T>::value_type
是T
。 - Dietmar Kühlvalue_type
不是要求返回容器中存储的对象类型吗?所以对于vector
实际上没有选择余地。(问题并没有说T
是2Darray
中存储的对象类型,这是我的错误) - MWidstd::vector<T>
,value_type
必须是T
。通常,你希望value_type
是元素的类型,这可能是模板参数,但不需要是任何模板参数之一。 - Dietmar KühlcolArray<rowArray<T> >
),要么使用单个包装容器(例如2dArray<T>
),但不要混合使用它们。嵌套方法允许您在整个过程中使用STL(例如vector<vector<T> >
),但可能会令人困惑,并且不允许您使用列迭代器等功能,这似乎是您想要的。
这个SO答案解决了使用ublas的问题,另一个建议使用Boost多维数组。2Darray
中检索列迭代器。但这实际上不是问题的范围,这只是为什么可能想要这样做的一个例子。 - Baruch