开发者

How to Implement a multidimensional array if the dimension is unknown at compile-time?

开发者 https://www.devze.com 2023-02-07 23:02 出处:网络
I want to implement a function that gets as a parameter a dimension \"n\" of an array of integers. This function also gets values \"k_1, k_2, ..., k_n\" defining the size of the array. Then this funct

I want to implement a function that gets as a parameter a dimension "n" of an array of integers. This function also gets values "k_1, k_2, ..., k_n" defining the size of the array. Then this function will fill this n开发者_StackOverflow社区-dimensional array.

How do I implement this efficiently with C++?

For example for n = 3 I would use

vector < vector < vector < int > > > array;

But I don't know the dimension at compile time.


Use a one-dimensional array, and fake the other dimensions using multiplication of offsets for indexing, and you can pass the dimension sizes in by vector, i.e.

std::vector<int> create_md_array(const std::vector<int> & dimensions)
{
    int size = std::accumulate(dimensions.begin(), dimensions.end(), 1, std::multiplies<int>());
    return std::vector<int>(size);
}


You have a couple of choices. You can implement it yourself, basically multiplying the coordinates by the sizes to linearize the multi-dimensional address, and just have a simple std::vector<whatever> to hold the data.

Alternatively, you could use std::valarray and friends to accomplish the same. It has a set of classes that are specifically intended for the kind of situation you describe -- but they're used so rarely that almost nobody understands them. Writing the code yourself stands a good chance of being easier for most people to read and understand.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号