最近需要写一个接口,函数每执行一次,需要存储448路的数据,执行第二次,仍然存储448路数据,麻烦的是,两次448路数据需要合为一个448路,这就要求,给一个二维数组,第一次直接存储,第二次,偏移一定的长度后再存储;
了解到三种方法可以实现:
1,new delete
int main()
{
//1,new delete 4*3的矩阵
int m = 4, n = 3;
//申请
int **array_new = new int *[4];
for (int i = 0; i < 4; i++)
array_new[i] = new int[3]();//加括号调用默认构造函数,初始化为0
display(array_new, 4, 3);
//释放
for (int i = 0; i < 4; i++)
delete array_new[i];
delete array_new;
return 0;
}
2,malloc,free
//2,malloc free 4*3的矩阵
int m = 4, n = 3;
//申请
int **array_new = (int**)malloc(sizeof(int*) * 4);
for (int i = 0; i < 4; i++)
{
array_new[i] = (int*)malloc(sizeof(int) * 3);
memset(array_new[i], 0, sizeof(int) * 3);
}
display(array_new, 4, 3);
//释放
for (int i = 0; i < 4; i++)
free (array_new[i]);
free (array_new);
return 0;
这里如果想把初始值用memset设为1的话,应该如何做呢?
直接把memset里的value改为1,打印输出的结果是16843009;很奇怪,但是转为二进制就明白原因了
原来memset是一个字节一个直接的设置初始值
一个字节8bit ,所以1对应0000 0001;
一个int,4个字节,所以就是:
0000 0001 0000 0001 0000 0001 0000 0001
也就是十进制的16843009
3,vector
//3,vector
//申请
vector<vector<int>> arrat_vector(4, vector<int>(3, 1));
//打印
for (int i = 0; i != arrat_vector.size(); i++)
{
for (int j = 0; j != arrat_vector[0].size(); j++) {
cout << arrat_vector[i][j] << " ";
}
cout << endl;
}
//释放,vector会自动释放,只要不是用malloc和new定义的vector,都不用手动释放