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

问题描述 投票:1回答:2

在c ++中是否可以创建一种可以包含任何维度的数组的变量?我的意思是一个可以存储1,2,3维数组的变量。

我想它可以通过模板制作,但我无法弄清楚如何。如果有人能提供帮助我真的很感激。

c++ arrays templates variables
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

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


2
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.