C++ STL中的Vector详解:动态数组操作与示例
版权申诉
5星 · 超过95%的资源 47 浏览量
更新于2024-09-11
4
收藏 78KB PDF 举报
"C++ Vector用法详解"
C++ Vector 是STL(Standard Template Library)中的一个核心组件,它是一个动态数组,提供了灵活的大小调整功能。由于它能够容纳不同类型的数据,因此在C++编程中被广泛用于存储和操作序列数据。
首先,使用Vector时需要包含头文件`<vector>`,并且可以通过两种方式来引用它:直接使用命名空间`using namespace std;`或指定std域`using std::vector;`。以下是一些基本的Vector操作:
1. **构造与初始化**:
- 默认构造:`vector<int> v;`创建一个空的vector。
- 初始化:`vector<int> v = {1, 2, 3};`创建一个包含初始值的vector。
2. **插入元素**:
- `push_back()`:在vector末尾添加元素,例如`v.push_back(4);`。
- `insert()`:在指定位置插入元素,如`v.insert(v.begin(), 0);`在开头插入0。
3. **删除元素**:
- `pop_back()`:移除最后一个元素,如`v.pop_back();`。
- `erase()`:删除指定位置的元素或一段范围的元素。
4. **赋值与复制**:
- `assign()`:用新的数据替换vector的所有元素,有两种形式:
- `v.assign(beg, end)`:用[beg, end)区间的数据替换v。
- `v.assign(n, elem)`:用n个elem的拷贝填充v。
5. **访问元素**:
- `at(index)`:安全地访问指定索引的元素,如果越界会抛出异常,如`v.at(2)`。
- `[]`运算符:直接访问元素,但无边界检查,如`v[2]`。
6. **迭代器操作**:
- `begin()`:返回指向第一个元素的迭代器。
- `end()`:返回指向最后一个元素之后的位置的迭代器,标志着容器的结束。
- 可以使用迭代器进行遍历,如`for(auto it = v.begin(); it != v.end(); ++it) {...}`。
7. **容量与大小**:
- `size()`:返回vector中的元素数量。
- `capacity()`:返回当前vector能容纳的元素数量,通常大于size(),表示预留的空间。
- `reserve(n)`:预分配空间,确保vector至少有n个可用位置。
- `resize(n)`:改变vector的大小,可以添加或删除元素,保持元素类型不变。
- `shrink_to_fit()`:请求vector的大小与实际元素数量一致,减少内存浪费。
8. **插入与删除效率**:
- 在vector的中间插入或删除元素会导致所有后续元素的移动,这可能比其他容器如list或deque效率低。
- 在尾部操作(如push_back、pop_back)通常更快,因为它们只需调整容量。
9. **操作示例**:
```cpp
vector<int> v1 = {10, 20};
vector<int> v2 = {30, 40};
v2.insert(v2.begin(), v1.begin(), v1.end()); // 将v1的元素插入到v2的开头
```
C++ Vector 是一个强大的工具,其动态数组特性使得在需要灵活数组大小时非常方便,同时提供了丰富的操作方法。然而,在处理大量元素和需要高效插入/删除操作时,可能需要考虑其他STL容器,如list或deque。
2020-12-31 上传
2020-12-25 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38514872
- 粉丝: 6
- 资源: 879
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展