C++动态申请与vector实现一维、二维、三维数组

需积分: 44 21 下载量 178 浏览量 更新于2024-09-10 收藏 19KB DOCX 举报
"这篇教程主要介绍了如何在C++中动态申请一维、二维和三维数组,以及使用vector来实现变长数组的方法。" 在C++编程中,有时我们需要在程序运行时根据用户输入或其他条件来决定数组的大小,这就需要用到动态数组。动态数组不同于静态数组,静态数组的大小在编译时就必须确定。下面将详细讲解一维、二维和三维数组的动态申请方法,以及使用vector作为替代手段。 1. 变长一维数组 在C++中,我们可以通过`new`运算符在运行时动态创建一维数组。例如,当数组长度在运行时输入时,可以这样做: ```cpp int len; cin >> len; int* p = new int[len]; // 使用数组... delete[] p; // 记得释放内存 ``` 在这里,`new int[len]`动态分配了`len`个整数的空间,并返回一个指向该空间起始位置的指针。需要注意的是,动态分配的内存必须在不再使用时通过`delete[]`释放,以避免内存泄漏。 另外,C++标准库中的`vector`类提供了一种更安全且灵活的方式来管理变长数组: ```cpp #include <iostream> #include <vector> using namespace std; int main() { int len; cin >> len; vector<int> array(len); // 使用数组... // vector会在适当的时候自动管理内存 return 0; } ``` 2. 变长二维数组 对于二维数组,有两种常见的动态分配方式:双指针法和使用`vector`。 - 双指针方法: 双指针法涉及到两层动态分配,先分配行指针,再为每一行分配列元素: ```cpp int num1, num2; cin >> num1 >> num2; int** p = new int*[num1]; for (int i = 0; i < num1; ++i) { p[i] = new int[num2]; } // 使用二维数组... for (int i = 0; i < num1; ++i) { delete[] p[i]; } delete[] p; ``` - 使用`vector`: `vector`可以嵌套使用来创建二维数组的效果: ```cpp int num1, num2; cin >> num1 >> num2; vector<vector<int>> array(num1, vector<int>(num2)); // 使用二维数组... // vector会自动管理内存 ``` 3. 变长三维数组 三维数组的动态分配原理与二维类似,只是多了一层分配。可以按照以下方式分配: ```cpp int num1, num2, num3; cin >> num1 >> num2 >> num3; vector<vector<vector<int>>> array(num1, vector<vector<int>>(num2, vector<int>(num3))); // 使用三维数组... ``` 虽然`new`运算符提供了动态数组的能力,但使用`vector`可以带来更好的内存管理,避免了手动释放内存的繁琐和潜在错误。在实际编程中,推荐优先使用`vector`来实现变长数组。