用于保存任何维数组的C ++变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于保存任何维数组的C ++变量相关的知识,希望对你有一定的参考价值。

在c ++中是否可以创建一种可以包含任何维度的数组的变量?我的意思是一个可以存储1,2,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

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

另一答案

你有没有试过动态记忆?在下面的例子中,它创建了一个二维数组。

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

如果你想拥有一个三维数组,也许你可以尝试在上面例子的第二步中定义一个二维数组。

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

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

以上是关于用于保存任何维数组的C ++变量的主要内容,如果未能解决你的问题,请参考以下文章

c 复习

c 复习

c 复习

用于连续内存的 std::array 与 C 样式数组

C:使用 2 个指针在数组中查找最大值(一个用于数组,一个用于最大值)

JS中for...in 语句用于对数组或者对象的属性进行循环操作吗?