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

标签 c++ arrays templates variables

是否可以在 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

您可以对数组乘法执行类似的操作。将问题分解成更小的部分,以便您可以使用递归并让模板处理其余部分!

关于用于保存任何维数组的 C++ 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55796002/

相关文章:

c++ - 我如何创建一个接受 map 或 unordered_map 的函数?

c++ - 如何在 CTreeCtrl 中显示自定义工具提示?

c++ - 在编译时识别所有调用 function1<T> 的所有 T 然后添加行 function2<T>()

c++ - 如何检测一个类是否在 C++ 中具有隐式构造函数和原始成员?

java - 将 ArrayList 字符串值转换为字节数组

mysql - 在node.js中将数组插入MySQL?

c++ - 强制操作系统在 "subroutine"之后执行清理

css - 如何使文本与类别数组一起迭代

c++ - 为什么 NULL 被转换成 string*?

c++ - 如何从模板生成具有 const 或非常量成员函数的类?