4

标准要求some_container<T>::value_typeT吗?

我之所以问,是因为我正在考虑用不同的方法来实现符合 STL 的二维动态数组。其中之一是拥有2Darray<T>::value_type2Darray_row<T>类似的东西,其中数组将作为行的集合进行迭代(有点简化。我的实际实现允许在 3 个方向上进行迭代)

4

3 回答 3

5

容器要求有点古怪,因为它们实际上没有被任何通用算法使用。从这个意义上说,这并不重要。

也就是说,要求是在容器的接口上,而不是在容器的实际实例化方式上。即使是非模板类也可以符合各种要求,事实上也可以。要求是value_type存在的;它的定义完全取决于容器的实现。

于 2012-11-12T11:39:03.033 回答
2

标准 (c++11) 中第 23.2.1 节中的表 96 需要一个容器类,其中包含要返回的X类型对象。TTX::value_type

因此,如果您some_container存储类型为 的对象T,则value_type必须为T.

于 2012-11-12T11:39:57.477 回答
0

要么有一个嵌套容器(so colArray<rowArray<T> >),要么有一个包装(2dArray<T>),但不要试图混合它们。嵌套方法允许您一直使用 STL ( vector<vector<T> >),但可能会造成混淆,并且不允许您使用您似乎想要的列迭代器等。

这个 SO 答案使用 ublas 解决,另一个建议使用Boost multi-arrays

通常,如果可以,请选择 STL 或 Boost 选项。你不太可能自己写东西。

于 2012-11-12T11:41:41.733 回答