如何动态初始化二维数组
时间: 2023-06-21 19:22:23 浏览: 55
在C++中,可以使用vector<vector<int>>来动态初始化二维数组。示例代码如下:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n = 3, m = 4;
vector<vector<int>> a(n, vector<int>(m, 0));
// 上面的代码等价于下面的代码
// vector<vector<int>> a;
// for (int i = 0; i < n; i++) {
// vector<int> row(m, 0);
// a.push_back(row);
// }
a[1][2] = 3; // 对二维数组进行赋值
cout << a[1][2] << endl; // 输出二维数组中的元素
return 0;
}
```
在示例代码中,首先定义了一个3行4列的二维数组a,它的初始值全部为0。然后将a的第2行第3列的元素赋值为3,并输出该元素的值。
注意,在使用vector<vector<int>>动态初始化二维数组时,需要指定行数和列数,并且可以指定初始值。在访问二维数组中的元素时,可以使用a[i][j]的方式来进行访问。
相关问题
动态初始化二维数组使用vector
动态初始化二维数组可以使用std::vector。例如,我们可以先创建一个vector<vector<int>>,然后使用resize函数来指定其大小,就可以动态创建一个二维数组。
下面是一个示例代码:
```c++
#include <vector>
#include <iostream>
int main() {
// 创建一个3x4的二维数组
std::vector<std::vector<int>> arr(3, std::vector<int>(4));
// 对数组进行赋值
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
arr[i][j] = i * j;
}
}
// 输出数组
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
std::cout << arr[i][j] << " ";
}
std::cout << std::endl;
}
return 0;
}
```
输出结果为:
```
0 0 0 0
0 1 2 3
0 2 4 6
```
这个二维数组的大小是在运行时动态确定的,非常灵活。
memset初始化二维数组
在 C/C++ 中,可以使用 `memset` 函数来初始化二维数组。但是需要注意的是,`memset` 函数是针对连续的内存块进行赋值的,而二维数组不一定是连续的内存块,因此在使用 `memset` 函数初始化二维数组时需要谨慎。
以下是使用 `memset` 函数初始化二维数组的示例代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 100; // 定义数组最大行列数
int main() {
int arr[MAXN][MAXN];
int rows = 3, cols = 4;
int val = 0; // 要赋的值
// 使用 memset 函数初始化二维数组
memset(arr, val, sizeof(arr));
// 输出二维数组的值
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
在这个代码中,我们使用 `memset` 函数将 `arr` 数组全部赋值为 `val`。需要注意的是,`memset` 函数的第三个参数应该是要赋的字节数,因此要乘上 `sizeof(arr)`。此外,由于 `memset` 函数是对内存块进行赋值,因此在二维数组 `arr` 中,第一维的大小必须是已知的,否则会出现编译错误。
总体来说,不建议使用 `memset` 函数来初始化二维数组,因为这种方式可能会导致一些意料之外的错误。建议使用循环遍历的方式或其他更加安全的方式来初始化二维数组。