gpt4 book ai didi

c++ - 用静态分配替换动态分配

转载 作者:行者123 更新时间:2023-11-27 23:48:27 25 4
gpt4 key购买 nike

我有一个项目,我必须定义一个不同维度的数组(如三角形),因为我不允许使用 std::vector 或其他容器类。为此,我使用了一个指针数组。通常,我会这样做:

int* triangle[n]; 
for(int i = 0; i < n; i++) {
triangle[i] = new int[i + 1];
for(int j = 0; j <= i; j++) cin >> triangle[i][j];
}

但是我一定不能使用动态内存!我以为这样做

int* triangle[n];
for(int i = 0; i < n; i++) {
int row[i + 1];
triangle[i] = row;
for(int j = 0; j <= i; j++) cin >> triangle[i][j];
}

会成功的。但它没有。相反,当我遍历数组并打印内容时,我得到了垃圾。那么,如何用静态分配替换动态分配?

最佳答案

所以,如果你想简化“数组的数组”,你的选择是数组线性化。这意味着您应该声明一个包含 70 个元素的数组,而不是每个包含 10 个项目的 7 个数组。然后,只需使用计算线性化数组中结果偏移的函数更改嵌套索引,中提琴!

在这里你可以找到这样的例子之一:How to map the indexes of a matrix to a 1-dimensional array (C++)?

如果您事先不知道您的数组有多长,确定初步预留大小可能是一个艰难的选择(例如,像 vector 等 STL 容器做同样的事情:它们分配一 block 内存然后扩大容器直到剩余可用容量,然后重新分配更大的 block ,将数据从旧缓冲区移动到新缓冲区,一次又一次,一次又一次……)

关于c++ - 用静态分配替换动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673197/

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