是否有任何库提供像vector<>这样的多维容器?
我想看到类似的东西:
TwoD<object_class_name> D2;
ThreeD<object_class_name> D3;
并且 object_class_name 可以是任何对象,而不仅仅是内置类型。
所以我可以像这样使用对象
D2[i][j]
D3[i,j,k] or D3(i,j,k)
或类似的
谢谢。
是否有任何库提供像vector<>这样的多维容器?
我想看到类似的东西:
TwoD<object_class_name> D2;
ThreeD<object_class_name> D3;
并且 object_class_name 可以是任何对象,而不仅仅是内置类型。
所以我可以像这样使用对象
D2[i][j]
D3[i,j,k] or D3(i,j,k)
或类似的
谢谢。
如果是 c++11,一个可能的解决方案是using
允许 a 的别名template
:
template <typename T>
using TwoD = std::vector<std::vector<T>>;
template <typename T>
using ThreeD = std::vector<std::vector<std::vector<T>>>;
用法:
TwoD<int> t2ints;
TwoD<std::string> t2strings;
ThreeD<int> t3ints;
ThreeD<std::string> t3strings;
boost::multi_array
可以做到这一点。
二维数组示例:
boost::multi_array<float, 2> float2D(boost::extents[5][10]);
float2D[0][0] = 1.0f;
3D 数组示例:
boost::multi_array<float, 3> float3D(boost::extents[5][10][20]);
float2D[0][0][0] = 1.0f;
存储的类型可以是类或结构以及原始类型,并且使用的内存将是连续的。
你可以这样做:
std::vector<std::vector<someType> > TwoDVector;
或者像这样的二维数组:
someType** TwoDArrayPointer;
someType TwoDArray[size][size2];
我不喜欢vector<vector>
,因为每一行在堆上都有自己单独分配的内存块。这会导致两个问题:
char *
用于图像数据的图像。因此,我建议您编写自己的二维数组模板。这是一个非常简单的任务。或者您可以在 github.com/jpreiss/array2d 上使用我的公共域代码。
另请注意:您不能operator[]
使用带有多个参数的函数重载。您可以重载operator()
2D 索引。
您可以使用vector
.
// Create
vector< vector<int> > vec(4, vector<int>(4));
// Write
vec[2][3] = 10;
// Read
int a = vec[2][3];