gpt4 book ai didi

C++ 如何使以有序方式读取和存储 100 个字符的二维数组 [500][500] 成为可能?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:33 26 4
gpt4 key购买 nike

我有一个编程作业,它需要存储最多 100 个 char 二维数组,大小最大为 500 * 500,以及与每个数组关联的 4 个数字。它应该是这样的:

struct BLOCK {
short x1;
short y1;
short x2;
short y2;
char points [ 500 ] [ 500 ];
};

程序必须读取这样的输入:

p
identifier_1 x1 y1 x2 y2
...
identifier_p x1 y1 x2 y2

在哪里

  • p - 将声明多少个 BLOCK(范围 1 - 100)
  • identifier - BLOCK 的标识符(范围 1 - 10 000)
  • x1 y1 x2 y2 - 在此上下文中不重要。重点是他们描述的二维数组最大可达 500 * 500。

当我尝试输入 p > 9 时,我试图让它工作失败:

#include <iostream>
#include <string>

using namespace std;

struct BLOCK {
short x1;
short y1;
short x2;
short y2;
char points [ 500 ] [ 500 ];
};

int main () {

short numberOfBlocks;

cin >> numberOfBlocks;

short indices [ numberOfBlocks ];

BLOCK BLOCKsTable [ numberOfBlocks ];

}

我还注意到,这东西不起作用:

char array [ 100 ] [ 500 ] [ 500 ];

我只能使用:

  • iostream
  • 字符串

我不能使用

  • malloc、calloc、alloc 等
  • 标准::vector

我的问题:

  • 如何让这个东西发挥作用?如何能够声明最多 100 个结构 block ?
  • 是否有其他简单的方法可以实现声明和存储 100 个二维数组 500*500 的目标?

最佳答案

500 * 500 = 250000。在整数中,BLOCK 的每个实例将占用大约 250kb。

您的示例代码使用 gcc 扩展来实例化堆栈上 nBLOCK 实例的数组。因此,十个实例将占用大约 2.5 兆字节。我不认为这是个问题,但也许您实验室的 Linux 机器配置了每个进程堆栈大小的一个小最大值。在任何情况下,BLOCK 的 100 个实例预计会在堆栈上占用 20.5 兆字节,这更有可能用完每个进程的堆栈分配,因此这在任何情况下都行不通。

“如何声明最多 100 个结构 BLOCK?”问题的答案就是简单地在全局静态命名空间中声明它们,而不是在堆栈上。您的作业条件非常隐蔽,它们似乎是为了强制您了解各种类型的实例化对象之间的差异——堆、堆栈和静态/全局。

关于C++ 如何使以有序方式读取和存储 100 个字符的二维数组 [500][500] 成为可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34376489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com