gpt4 book ai didi

c++ - 扩展动态分配的数组

转载 作者:太空狗 更新时间:2023-10-29 20:18:27 24 4
gpt4 key购买 nike

我分配了一个数组如下。

#include <iostream>

int main() {
const int first_dim = 3;
const int second_dim = 2;

// Allocate array and populate with dummy data
int** myArray = new int*[first_dim];
for (int i = 0; i < first_dim; i++) {
myArray[i] = new int[second_dim];
for (int j = 0; j < second_dim; j++) {
myArray[i][j] = i*second_dim + j;
std::cout << "[i = " << i << ", j = " << j << "] Value: " << myArray[i][j] << "\n";
}
}

// De-allocate array
for (int i = 0; i < first_dim; i++)
delete[] myArray[i];
delete[] myArray;
}

假设我想将第 4 个元素添加到第一个维度,即 myArray[3]。这可能吗?

我听说 Vector 在这方面的效率要高得多,但我几乎不知道它们是什么,而且我以前从未使用过它们。

最佳答案

是的,但以一种非常痛苦的方式。你要做的是分配新的内存,它现在有你想要的新尺寸,在本例中是 4 和 2,然后将矩阵的所有内容复制到新矩阵,然后释放前一个矩阵的内存......就是这样痛苦。现在让我们看看如何用 vector 完成相同的操作:

#include <vector>
using std::vector;

int main()
{
vector< vector <int> > matrix;
matrix.resize(3);
for(int i = 0; i < 3; ++i)
matrix[i].resize(2);

matrix[0][1] = 4;
//...

//now you want to make the first dimension 4? Piece of cake

matrix.resize(4);
matrix[3].resize(2);
}

HTH

编辑:对您的原始代码的一些评论:

  • 在 C++ 中,ALL_CAP_NAMES 通常指代宏(您#define 的东西)。避免在其他情况下使用它们
  • 为什么声明 FIRSTDIM 和 SECONDDIM 是静态的?那是绝对没有必要的。如果局部变量是静态的,则非正式地意味着下次您使用保留值调用该函数时它将是相同的变量。由于从技术上讲您不能再次调用 main,因此这是无用的。即使你能做到,它仍然没有用。
  • 你应该编写 delete [] array[i];delete [] array; 这样编译器就知道你正在尝试的 int* 和 int** delete 实际上指向一个数组,而不仅仅是一个 int 或 int*。

关于c++ - 扩展动态分配的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3980552/

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