c++ - 如何初始化未知大小的多维 vector ,C++

标签 c++ arrays matrix

在我的项目中,我需要通过 std:vector 创建可变大小的可变多维矩阵。我在下面找到了正确的代码,它可以创建这个:

template<typename T, std::size_t N>
struct md_vector
{
    using type = std::vector<typename md_vector<T, N - 1>::type>;
};

 template<typename T>
 struct md_vector<T, 1>
 {
    using type = std::vector<T>;
 };

 Template<typename T, std::size_t N>
 using md_vector_t = typename md_vector<T, N>::type;


//using
//this create 3 dimensional vectors of int - std:vector<std:vector<std:vector<int>>>
 md_vector_t<int, 3> matrix;

但现在我不知道如何使用这个矩阵?我想将整个矩阵初始化为 0....例如 4 维矩阵,每个 vector 7 个整数.... 7 x 7 x 7 x 7 整数?初始化后如何赋值? matrix[0][0][0][0] - 这我不能,因为我不知道维度大小。

非常感谢您的一些建议...

最佳答案

处理这种疯狂情况的最简单方法是使用 resize()。让编译器弄清楚如何初始化 vector :

md_vector_t<int, 4> matrix;

matrix.resize(7);

这将调整第一个维度的大小。现在,您需要调整第一个维度中每个单独元素的大小,以便构建第二个维度。

for (auto &a:matrix)
    a.resize(7);

很快,您就会弄清楚如何让范围迭代为您工作。像这样:

md_vector_t<int, 4> matrix;

matrix.resize(7);

for (auto &a:matrix)
{
    a.resize(7);
    for (auto &b:a)
    {
        b.resize(7);
        for (auto &c:b)
        {
             c.resize(7);
        }
    }
}

用我的手指算了一下,我相当确定这会在这里初始化所有四个维度。

在 C++11 之前,这会很痛苦。

现在,我不确定你为什么说“矩阵[0][0][0][0] - 这个我不能,因为我不知道维度大小”。因为这正是您四处偷看和戳戳这个笨蛋的方式。

矩阵中的每个元素都将值构造为 0。如果要将值初始化为其他值,只需使用相同的嵌套范围迭代方法来初始化值即可。

现在,就用于初始化任意维度矩阵的模板而言,采用与现有模板相同的方法并使用相同的方法应该是微不足道的:一维 vector 的特化,以及默认的调用 resize() 的模板,然后执行范围迭代以在其容器中的值上递归调用自身。

关于c++ - 如何初始化未知大小的多维 vector ,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36903577/

相关文章:

c++ - C++ 是 "waste of time"吗?

c - 从另一个数组内部的数组中检索值 [C]

python - 对多个文档进行排序/比较的最佳方法?

java - 如何在JAVA中将多个数组合并成一个矩阵?

巨大矩阵的matlab相关矩阵

c++ - 如果我的类正确管理资源,那么拥有智能指针有什么意义呢?

c++ - samplerCube 数组

c++ - 获取错误无法从C++ 17编译器的间接库继承构造函数

c++ - 如何将位图数组从托管 C++ 传递到非托管 C++

matrix - 在着色器中的二维图像矩阵上旋转 Z 轴