【问题标题】:Creating a 2-dimensional array with different sizes within a loop [duplicate]在循环中创建具有不同大小的二维数组[重复]
【发布时间】:2021-06-06 11:06:53
【问题描述】:

问题

我有一个 int 的数组,它们的值不同,称为 sizes。我想创建一个二维数组(称为arr),其中第一个维度的大小是sizes 数组的长度,第二个维度的大小是该索引处的整数值。我希望下面的代码能让我更容易理解我的问题。

    int sizes[4] = { 1, 2, 3, 4 };

    // What I need is an array with this shape
    {
        {0},                  // arr[0]
        { 0, 0 },             // arr[1]
        { 0, 0, 0 },          // arr[2]
        { 0, 0, 0, 0 }        // arr[3]
    };

我的实际代码,sizes 数组更大,所以如果可能的话,我想避免大量重复的代码行。

我的尝试

我是C++ 的新手,但我读过constexpr。我想我可以创建一个函数来返回这个数组,但我还没有让它工作。

我还认为我可以遍历 sizes 数组,并为每个 int 创建一个具有该大小的数组,但我不能将其分配给 arr

【问题讨论】:

  • 请使用std::vector而不是数组,这样更容易。
  • 感谢您的建议。在撰写本文时,我了解到向量索引比数组索引慢。看来我错了,索引指针对象的时候性能是一样的。

标签: c++ arrays loops multidimensional-array c++17


【解决方案1】:

C++ 不支持锯齿状二维数组。二维数组的大小必须为 N x M,其中 NM 都大于零。

除了使用二维数组,您还可以使用二维向量来获得类似的行为

std::vector<std::vector<int>> table;
for (auto size : sizes)
    table.push_back(std::vector<int>(size));

【讨论】:

  • 感谢您的回复。但是,我确实考虑过使用向量,如果我错了,请纠正我,但是从数组索引不是比从向量更快吗?我需要尽可能多地从我的代码中提取性能。
  • @Kieran 启用编译器优化后,访问向量和访问数组应该具有相同的性能。
  • 谢谢,我不知道。到时候我会研究更多。
  • @Kieran 一些介绍性阅读:stackoverflow.com/questions/2740020/…
猜你喜欢
  • 2014-09-02
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
相关资源
最近更新 更多