【问题标题】:How do i create an array of unequal length arrays?如何创建不等长数组的数组?
【发布时间】:2011-01-01 14:58:57
【问题描述】:

我需要创建一种二维数组,其中每个辅助数组的长度都不同。我有一个已知长度的一维数组(它定义了要形成的数组的数量),每个元素都有一个数字,表示该位置的辅助数组的长度。

每个数组都相当大,所以我不想创建一个万能的“假”二维堆数组来覆盖所有内容。

我该怎么做呢?我之前制作的任何二维数组都是矩形的。

我正在尝试这样做,以便我可以创建一些代码来动态生成线程来分割一些工作负载。

谢谢,

-伪造

【问题讨论】:

  • w00t.. 有没有视觉c++??
  • 是的 - 你的意思是什么?
  • 忘记了它的存在。现在我记得以前用 VC++ 做过一些小项目。
  • 耸耸肩这是我的教授建议的一个不错的免费“标准”开发平台……尽管他所做的最后一次 C 编程是在 Borland C 编译器上……

标签: arrays visual-c++


【解决方案1】:

使用 std::vectors 的 std::vector - 用于整数:

#include <vector>
std::vector <std::vector <int> > v2d;

【讨论】:

  • 我从来没有真正理解矢量的真正意义。除了具有自动内存管理和对程序员来说更容易处理之外,如果我所做的只是迭代数据集而无需向其中插入数据,它是否提供任何真正的性能优势?
  • 易于使用对大多数程序员来说是一个巨大的胜利!它们的效率并不比数组高,但如果在完全优化的情况下进行编译,也同样如此。
【解决方案2】:

某种稀疏数组在这里可能会有所帮助。堆栈溢出时有this questionthis site

祝你好运。

【讨论】:

    【解决方案3】:

    或者,如果您更多地考虑 C 的思路(有无数人编写 C 代码但使用 C++ 编译,这主要是可行的):

    声明不是二维数组:int arr[rows][cols]

    但指向数组的指针的一维数组:int (arr*)[rows]

    不太清楚那个语法,如果我错了,请有人纠正我!

    【讨论】:

    • 其实这正是我想要做的。我需要初始化一个指针数组,但我不知道它的语法。
    • 看起来 Rahul G 同意并在示例方面做得更好。
    【解决方案4】:

    您可以执行以下操作:

    int **array = new int*[3];
    array[0] = new int[5];
    array[1] = new int[2];
    array[2] = new int[11];
    

    在使用完array 后不要忘记正确释放。

    编辑:

    您可以通过以下方式将辅助指针初始化放入循环中:

    int cells[] = {5,2,11};
    int **array = new int*[3];
    for (int i = 0; i < 3; i++){
      array[i] = new int[cells[i]];
    }
    

    PS:当我需要多维数组时,我个人更喜欢使用Boost.MultiArray。您可能还想看看它。

    【讨论】:

    • 啊,谢谢,这差不多了,但我只需要将辅助指针初始化放入一个循环中......我会让你知道它是怎么回事。
    • 告诉我们你怎么知道二级数组有多大,我们会告诉你如何编码:)
    • 是的,就是这样。只需要把它放在一个循环中就可以了。为什么我自己无法解决这个问题?...也许这与早上 6 点 20 分有关,我很累但仍然无法入睡...
    • @Carl:二级阵列的大小与有效夹紧位置的总数有关……这……让我想到了我的机械工程论文……几乎没有从事机械工程,但如果没有近 4 年的机械工程专业背景,就无法解释...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 2023-03-27
    • 2021-12-05
    • 2020-02-20
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    相关资源
    最近更新 更多