【问题标题】:C++ variable to hold any dimensional array用于保存任何维度数组的 C++ 变量
【发布时间】:2019-04-22 14:28:45
【问题描述】:

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

我猜它可以通过模板制作,但我不知道如何制作。如果有人能提供帮助,我将不胜感激。

【问题讨论】:

  • 你能举一个例子来说明你打算用这个编写的那种代码吗?
  • (void*) 呢?
  • "有可能...?" 答案几乎总是“是的,”,但有些事情告诉我这对您没有帮助.您能否向我们提供更多信息,说明您正在尝试做什么、尝试过什么以及出了什么问题,以便我们为您提供有用的答案?
  • @AdamVarga 乘以数组是什么意思?你说的是点积还是矩阵乘法?

标签: c++ arrays templates variables


【解决方案1】:

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

我会像处理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中的第三维数组。

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

    【讨论】:

      猜你喜欢
      • 2019-07-06
      • 1970-01-01
      • 2015-04-22
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      相关资源
      最近更新 更多