掌握C++ vector的使用技巧及代码实例

## vector使用详解
### 概述
在C++中,`std::vector` 是一种序列容器,其元素可以在运行时动态地改变大小。`vector` 类位于`<vector>`头文件中,是C++标准模板库(STL)的一部分。它允许我们存储任意类型的对象,这些对象在内存中连续存储,因此可以提供高效的随机访问。`vector` 除了动态数组的基本操作外,还提供了很多实用的成员函数,用于插入、删除、访问元素,以及管理内存等。
### vector的基本属性和操作
#### 头文件和命名空间
在使用`std::vector`之前,需要包含头文件`#include <vector>`,并且由于它位于`std`命名空间中,因此在使用时需要使用`std::`前缀,除非使用`using namespace std;`声明。
#### 构造函数
`vector`有多个构造函数,包括默认构造函数、复制构造函数和接受范围的构造函数等。
- 默认构造函数:`std::vector<T> v;` 创建一个空的vector。
- 带有元素个数的构造函数:`std::vector<T> v(n);` 创建一个含有n个元素的vector,每个元素都进行值初始化。
- 带有元素个数和初值的构造函数:`std::vector<T> v(n, val);` 创建一个含有n个元素的vector,每个元素都初始化为`val`。
- 带有范围的构造函数:`std::vector<T> v(first, last);` 创建一个含有[first, last)范围内所有元素的vector。
#### 赋值
- 赋值运算符`=`:可以直接使用赋值运算符来复制一个`vector`的所有元素到另一个`vector`。
- `assign`方法:`v.assign(n, val);` 将`n`个`val`赋给`vector v`。
#### 元素访问
- `operator[]`:通过下标访问元素,不进行越界检查。
- `at()`方法:通过下标访问元素,但会进行越界检查。
- `front()`方法:访问`vector`的第一个元素。
- `back()`方法:访问`vector`的最后一个元素。
#### 插入和删除
- `push_back()`:在`vector`末尾插入一个元素。
- `pop_back()`:删除`vector`末尾的元素。
- `insert()`:在指定位置插入元素,例如`v.insert(pos, val)`在位置`pos`插入`val`。
- `erase()`:删除指定位置的元素或指定范围的元素,例如`v.erase(pos)`删除位置`pos`的元素。
- `clear()`:清空`vector`的所有元素。
#### 大小和容量
- `size()`:返回`vector`中元素的数量。
- `capacity()`:返回`vector`在不进行内存分配的情况下可以容纳的元素数量。
- `resize()`:调整`vector`的大小,如果新的大小大于原大小,则添加默认值初始化的元素。
- `reserve()`:请求`vector`分配足够的空间来容纳至少`n`个元素,如果`n`大于当前容量,则此函数会导致内存分配。
#### 其他操作
- `empty()`:检查`vector`是否为空。
- `swap()`:交换两个`vector`的内容。
- `begin()` 和 `end()`:分别返回指向`vector`开头和结尾的迭代器。
- `rbegin()` 和 `rend()`:分别返回指向`vector`结尾和开头的反向迭代器。
- `sort()`:对`vector`进行排序,可以接受自定义的比较函数。
- `find()`:在`vector`中查找指定值的第一个位置。
- `remove()`:删除所有指定值的元素,但不改变`vector`的大小。
### 示例代码解析
假设我们有如下示例代码`vector的使用.txt`或`Vector的使用`中,展示如何创建一个`std::vector`,并使用其提供的各种功能。
```cpp
#include <iostream>
#include <vector>
int main() {
// 默认构造函数创建vector
std::vector<int> v;
// 使用push_back添加元素
v.push_back(1);
v.push_back(2);
v.push_back(3);
// 访问元素
std::cout << "第一个元素是: " << v.front() << std::endl;
std::cout << "最后一个元素是: " << v.back() << std::endl;
// 遍历vector
for(int n : v) {
std::cout << n << ' ';
}
std::cout << std::endl;
// 删除第一个元素
v.erase(v.begin());
// 插入新元素
v.insert(v.begin(), 0);
// 判断是否为空
if (!v.empty()) {
std::cout << "vector不为空" << std::endl;
}
// 清空vector
v.clear();
// 判断vector是否为空
if (v.empty()) {
std::cout << "vector现在为空" << std::endl;
}
return 0;
}
```
在上述代码中,演示了如何创建一个`vector`,使用`push_back()`添加元素,使用`front()`和`back()`访问第一个和最后一个元素,使用范围for循环遍历`vector`,使用`erase()`删除元素,以及使用`empty()`判断`vector`是否为空。这个代码片段覆盖了`vector`的一些核心用法。
### 总结
`std::vector`是C++中非常重要的容器之一,其动态数组的特性使得它在需要动态管理内存的场景下非常有用。通过上述的详细用法和示例代码解析,可以看出`vector`提供了非常丰富的成员函数,使得我们可以方便地进行数据的插入、删除、访问和查询操作。熟练掌握`std::vector`的使用,对于任何希望深入学习C++的开发者而言,都是必不可少的技能。
646 浏览量
128 浏览量
248 浏览量
114 浏览量
点击了解资源详情
点击了解资源详情
603 浏览量

constmei
- 粉丝: 1
最新资源
- 深入理解Typescript源码压缩包解析
- 深入解析MD4碰撞攻击实例研究
- Kingston U盘量产为CDROM的终极解决方案
- 二级圆柱齿轮减速器设计与传动装置方案
- 多人在线3D游戏开发示例项目解析
- 全面解析SqlHelper工具类:Java数据库编程助手
- 粉色卡通美少女PPT模板下载 - 精美背景幻灯片设计
- DBI-1.637版本特性与更新要点
- 深入探索SceneKit在高级3D游戏开发中的应用
- 银行搜索数据集:11000网页的11类别预分类数据
- jz4725系列MP4固件升级:英汉词典功能
- C++实现杨辉三角图形输出
- 轻松打开注册PDG文件的免安装汉化阅读器
- 航空客运网上订票系统毕业设计指南
- 迷你Win98系统,可安装在128MB U盘上的ISO文件
- CPU-Z版本选择指南:32位与64位系统兼容性