C++标准模板库vector详解及使用示例
需积分: 10 39 浏览量
更新于2024-09-12
收藏 93KB PDF 举报
"C++中vector使用范例"
C++中的`vector`是一个强大的容器,它在标准模板库(STL)中扮演着重要的角色。`vector`是一个动态数组,允许在运行时改变其大小,提供了许多便利的功能。下面将详细讨论`vector`的基本使用和一些高级特性。
首先,`vector`的创建和初始化可以通过指定元素数量和类型来完成。例如,创建一个能存储100个整数的`vector`:
```cpp
vector<int> vecMyHouse(100); // 创建一个包含100个默认值(int的零值)的vector
```
`vector`可以像普通数组那样通过索引进行访问和修改元素:
```cpp
vecMyHouse[50] = 1024; // 访问并修改第50个元素
```
`push_back()`函数用于在`vector`的末尾添加元素:
```cpp
for (int i = 0; i < 25; i++) {
vecMyHouse.push_back(1); // 向vector末尾添加25个1
}
```
`resize()`函数可以改变`vector`的大小,并可选地提供新元素的初始值:
```cpp
vecMyHouse.resize(400); // 将vector的大小扩展到400个元素,原有的元素保持不变
```
`vector`可以存储任何类型的对象,包括自定义的类类型:
```cpp
class Cmyclass {}; // 自定义类
vector<Cmyclass> vecMyClass; // 创建存储Cmyclass对象的vector
```
初始化`vector`时可以提供初始值:
```cpp
vector<int> vecMyHouse(100, 0); // 创建一个100个元素的vector,所有元素初始值为0
```
复制`vector`也很简单:
```cpp
vector<int> myVec;
myVec = vecMyHouse; // 复制vecMyHouse的内容到myVec
```
要使用`vector`,首先需要包含头文件`<vector>`,并可以使用命名空间`std`:
```cpp
#include <vector>
// 使用方法1:明确指定std命名空间
using std::vector;
// 使用方法2:使用全局命名空间std
using namespace std;
// 使用方法3:每次使用vector时指定std命名空间
std::vector<int> myHouse;
```
`vector`提供了许多成员函数,包括但不限于:
- `size()`:返回`vector`的元素数量。
- `empty()`:检查`vector`是否为空。
- `front()`:获取第一个元素。
- `back()`:获取最后一个元素。
- `at(index)`:安全地访问指定索引处的元素,如果索引越界,会抛出异常。
- `insert iterator, value`:在指定迭代器位置插入一个值。
- `erase iterator` 或 `erase range`:删除单个元素或元素范围。
- `reserve(size)`:预留足够的内存以容纳至少`size`个元素,避免不必要的内存重新分配。
- `capacity()`:返回当前已预留的内存大小。
- `shrink_to_fit()`:减少`vector`的容量至实际元素数量,释放未使用的内存。
`vector`的另一个重要特点是其内存管理。由于`vector`是动态数组,当添加元素导致容量不足时,`vector`会自动进行内部重分配,这可能涉及到拷贝所有元素到新的内存位置。因此,在处理大量数据或性能敏感的场合,需谨慎使用`vector`,并考虑其他容器,如`deque`或`list`。
总结,`vector`是C++中非常常用且灵活的容器,它提供了动态数组的功能,支持多种操作,并能容纳任何类型的对象。熟练掌握`vector`的使用对于编写高效且易于维护的C++代码至关重要。
2014-11-06 上传
2008-01-24 上传
2023-07-25 上传
2013-09-22 上传
2007-12-18 上传
2008-12-23 上传
2024-01-20 上传
2008-10-01 上传
2009-08-04 上传
youxiang
- 粉丝: 0
- 资源: 3
最新资源
- 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语言构建高效分布式网络爬虫