C++标准库vector详解与用法示例
3星 · 超过75%的资源 需积分: 42 129 浏览量
更新于2024-09-13
1
收藏 52KB DOC 举报
"C++ vector是C++标准库中的动态数组,提供了一种高效且灵活的方式来存储和管理元素序列。它支持动态增长和收缩,元素在内存中是连续存储的,可以像数组一样通过索引来访问。这篇内容主要介绍了C++ vector的用法,包括其定义、初始化、值初始化以及常用的操作方法。
一、定义和初始化
C++中的`std::vector`是一个模板类,用于创建可调整大小的数组。要使用它,首先需要包含`<vector>`头文件。例如,创建一个存储整数的vector可以这样定义:
```cpp
#include <vector>
vector<int> v1; // 默认为空
vector<int> v2 = v1; // v2是v1的副本
vector<int> v3(5, 0); // 包含5个值为0的元素
vector<int> v4(5); // 同样包含5个值为0的元素,但不需显式指定初始值
int a[] = {0, 1, 2, 3, 4};
vector<int> v5(a, a + 5); // 从数组a初始化,包含5个元素
vector<int> v6(v5); // v6是v5的拷贝
vector<int> v7(10, 7); // 包含10个值为7的元素
```
二、值初始化
当创建vector时,如果没有指定元素的初始值,vector会自动进行值初始化。对于类类型的元素,会调用对应的构造函数进行初始化;对于没有构造函数的基本类型,如整型,会提供一个默认的初始值(通常是0)。
三、常用操作
1. `push_back()`:在vector的末尾添加一个元素。例如,`v.push_back(10)`会在v的末尾添加一个值为10的元素,使vector的大小增加。
2. `size()`:返回vector中元素的数量。如`size_t sz = v.size();`可以获取vector的大小。
3. `empty()`:判断vector是否为空。`if (v.empty())`用于检查vector是否不包含任何元素。
4. `resize()`:改变vector的大小。例如,`v.resize(2 * v.size(), 99)`会将vector的大小翻倍,并用99填充新增的元素。如果不提供第二个参数,新元素将被值初始化。
5. `reserve()`:预留存储空间。例如,`v.reserve(100)`确保vector有足够的空间来存储100个元素,而不会立即触发重新分配。这有助于减少因动态增长导致的性能损失。
6. `insert()`:在vector的特定位置插入元素。例如,`v.insert(v.begin(), 5)`会在v的开头插入一个值为5的元素。
7. `erase()`:删除vector中的元素。`v.erase(v.begin())`会删除第一个元素,而`v.erase(v.begin(), v.end())`会清空整个vector。
8. `begin()`和`end()`:返回vector的迭代器,分别指向第一个和最后一个元素之后的位置。可以用来遍历vector中的所有元素。
四、其他操作
- `at()`:安全访问vector的元素,会在越界时抛出异常。`int val = v.at(index);`
- `operator[]`:与`at()`类似,但不会检查越界,效率稍高。`int val = v[index];`
- `capacity()`:返回vector当前已分配的存储空间,可能大于size()。
- `shrink_to_fit()`:请求vector的存储空间缩小到实际大小,但这不是必须的,取决于实现。
通过这些操作,C++ vector可以作为动态数组灵活地处理数据,适应不同的编程需求。在处理动态数据集合时,vector通常比固定大小的数组更方便、更高效。
2011-07-25 上传
2011-04-23 上传
2024-04-13 上传
2023-09-28 上传
2023-07-20 上传
2023-07-15 上传
2024-01-28 上传
2023-10-19 上传
2023-05-23 上传
qq2387784
- 粉丝: 0
- 资源: 1
最新资源
- 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语言构建高效分布式网络爬虫