Android数组大小动态扩展,c – 扩展动态分配的数组

我按如下方式分配了一个数组.

#include

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,然后将矩阵的所有内容复制到你的新矩阵,然后释放前一个矩阵的内存…那是痛苦.现在让我们看看向量是如何完成的:

#include

using std::vector;

int main()

{

vector< vector > 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是静态的?这绝对没必要.如果局部变量是静态的,则非正式地表示下次使用保持值调用函数时它将是相同的变量.因为你在技术上不能称为第二个sime,这是没用的.即使你能做到这一点,它仍然是无用的.

>你应该删除[] array [i];并删除[]数组;所以编译器知道你试图删除的int *和int **实际上指的是一个数组,而不仅仅是一个int或int *.

标签:c,arrays,dynamic

来源: https://codeday.me/bug/20190730/1581063.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值