【问题标题】:Multi-dimensional array in C++C++中的多维数组
【发布时间】:2014-06-20 07:57:14
【问题描述】:

在运行时指定维数的 C++ 中是否有可用的多维数组实现?基本上,我正在寻找这样的东西:

// create a 4 dimensional array 
int num_dim = 4; 
int sizes[4] = {3, 2, 4, 5}; // size for each dimension
MultiArray<int> A( num_dim, sizes ); 

// accessing a element in the array
int index[4] = {2, 2, 1, 0};
A[index] = 3; 

编辑: 请注意,我不想使用std::vector&lt;std::vector&lt;...&gt;&gt;boost::multi_array,因为我事先不知道维度的数量。

【问题讨论】:

  • std::vector&lt;int&gt; 来救援!另外,boost::multi_array
  • 问题是我事先不知道维数。我正在寻找更灵活的东西。
  • 请注意,您始终可以使用自己的类包装 boost multi_array。你的类可以在构造时构造一个 multi_array 并使用它的 operator[] 访问它。
  • @YuchenZhong:你真的是指维度的数量,而不仅仅是它们的大小吗?
  • 这可能是XY Problem 吗?为什么需要这个?

标签: c++ arrays


【解决方案1】:

请注意,我不想使用std::vector&lt;std::vector&lt;...&gt;&gt;boost::multi_array,因为我事先不知道维度的数量。

使用std::vector&lt;std::vector&lt;...&gt;&gt; 最适合您的情况。

int m;
int n;

// Read the dimensions of the 2D array.
std::cin >> m >> n;

// Create a 2D array of size m x n using `std::vector`.
std::vector<std::vector<int>> array(m, std::vector<int>(n));

【讨论】:

    【解决方案2】:

    是的,实现存在于 boost

    http://www.boost.org/doc/libs/1_55_0/libs/multi_array/doc/user.html

    typedef boost::multi_array<double, 3> array_type;
      typedef array_type::index index;
      array_type A(boost::extents[3][4][2]);
    

    【讨论】:

    • 不回答这个问题,尽管 user3477950 的尝试很好。或者即使在问题的第一次修订中也是如此?
    • 在@user3477950 发表评论后,我确实修改了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 2016-12-07
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多