C ++变量可保存任何维数组

时间:2019-04-22 14:28:45

标签: c++ arrays templates variables

在c ++中是否可以创建可以容纳任意维数组的变量类型?我的意思是可以存储1、2、3 ...维数组的变量。

我想它可以通过模板来制作,但是我不知道怎么做。如果有人可以帮助,我将非常感谢。

2 个答案:

答案 0 :(得分:3)

听起来您想“创建一个可以乘以数组的函数”,该函数将“用于许多不同的维度”。

我将处理此问题,就像处理vector输出运算符一样:使用模板进行递归!

如果我想在添加两个vector时想做一个将所有数字相加的函数,我可以这样做:

template <typename T>
int operator+(std::vector<T> v1, std::vector<T> v2) {
    if(v1.size() != v2.size()) { throw; } //for simplicity
    int sum = 0;
    for(size_t x = 0; x < v1.size(); x++) {
        sum += v1.at(x) + v2.at(x);
    }
    return sum;
}

请注意,这里的魔术就在行中

sum += v1.at(x) + v2.at(x);

如果v1.at(x)v2.at(x)std::vector,我们将再次递归调用此函数。但是,如果它们是int,我们将它们添加到sum中并继续。

您可以在此处看到此操作:ideone

您可以为数组乘法做类似的事情。将问题分解成小块,以便您可以使用递归并让模板处理其余部分!

答案 1 :(得分:2)

您是否尝试过动态内存?在下面的情况下,它将创建一个二维数组。

http://www.cplusplus.com/doc/tutorial/dynamic/

如果要具有三维数组,则可以尝试在上述示例的第二步中定义二维数组。

对于四维数组,在步骤2中为三维数组。

或者,您可以继续使用指针。