C++动态申请与vector实现一维、二维、三维数组
需积分: 44 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`来实现变长数组。
2017-09-12 上传
2011-03-18 上传
2024-03-24 上传
2008-07-28 上传
2024-03-24 上传
点击了解资源详情
点击了解资源详情
cysj_2987
- 粉丝: 0
- 资源: 35
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫