C++标准模板库vector详解及使用示例
需积分: 10 104 浏览量
更新于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++代码至关重要。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2023-07-25 上传
2013-09-22 上传
2007-12-18 上传
2008-12-23 上传
2024-01-20 上传
2010-08-11 上传
youxiang
- 粉丝: 0
- 资源: 3
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程