vector是C++ STL中的动态数组,支持自动内存管理与随机访问。它可通过多种方式定义初始化,如空构造、指定大小、数组或列表初始化;常用操作包括push_back、emplace_back添加元素,pop_back、erase删除元素,front、back访问首尾元素,size、capacity获取容量信息,并支持reserve预分配和resize调整大小。遍历方式有下标、迭代器和范围for循环(推荐const auto&)。vector可嵌套实现二维结构,每行长度可变。注意:内存连续,尾插删高效,中间操作慢;避免保存指针或迭代器,插入可能使它们失效;clear不释放内存,可用swap技巧释放。掌握vector能显著提升C++开发效率。

在C++中,vector 是最常用的标准模板库(STL)容器之一。它是一个动态数组,能够自动管理内存,支持随机访问,并且可以在运行时动态地添加或删除元素。相比普通数组,vector 更安全、更灵活,是处理变长数据的首选工具。
vector的基本定义与初始化
要使用 vector,需要包含头文件 :
#include
常见定义方式如下:
空 vector:
std::vector vec; // 创建一个空的整型vector 指定大小:
std::vector vec(5); // 包含5个元素,初始值为0 指定大小和初始值:
std::vector vec(5, 10); // 5个元素,每个都是10 用数组初始化:
int arr[] = {1, 2, 3};
std::vector vec(arr, arr + 3); 用另一个 vector 初始化:
std::vector vec1 = {1, 2, 3};
std::vector vec2(vec1); 列表初始化(C++11起):
std::vector vec = {1, 2, 3, 4, 5};
vector的常用操作方法
vector 提供了丰富的成员函数来操作数据,以下是最核心的几种:
立即学习“C++免费学习笔记(深入)”;
1. 添加元素
vec.push_back(x); // 在末尾插入一个元素x vec.emplace_back(x); // 更高效地构造并插入元素(推荐用于复杂对象)
2. 删除元素
vec.pop_back(); // 删除最后一个元素 vec.clear(); // 清空所有元素 vec.erase(iter); // 删除迭代器指向的元素 vec.erase(begin + 1, begin + 3); // 删除区间 [1,3)
3. 访问元素
vec[i]; // 随机访问第i个元素(不检查越界) vec.at(i); // 访问第i个元素,会做越界检查,越界抛出异常 vec.front(); // 返回第一个元素 vec.back(); // 返回最后一个元素 &vec[0]; // 获取首元素地址,可用于传给C风格函数
4. 容量与大小相关
vec.size(); // 当前元素个数 vec.empty(); // 判断是否为空,返回 true/false vec.capacity(); // 当前分配的存储空间能容纳多少元素 vec.reserve(n); // 预分配至少n个元素的空间,避免频繁扩容 vec.resize(n); // 改变大小,若n大于原大小,则用0填充 vec.resize(n, val); // 扩展时用val填充
vector的遍历方式
有多种方式可以遍历 vector 中的元素:
1. 下标遍历
for (int i = 0; i std::cout }
2. 迭代器遍历
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout }
3. 范围 for 循环(C++11 推荐)
for (const auto& x : vec) {
std::cout }
使用 const auto& 可以避免拷贝,提高效率。
vector的二维使用(模拟二维数组)
vector 也可以嵌套使用,创建二维结构:
std::vector> matrix(3, std::vector(4, 0));
// 创建3行4列的二维vector,初始值为0
访问方式与普通二维数组一致:
matrix[1][2] = 5;
也可逐行添加:
std::vector> grid;
grid.push_back({1, 2, 3});
grid.push_back({4, 5});
注意:每一行可以有不同的长度,不像数组那样必须规整。
注意事项与性能建议
vector 的内存是连续的,支持高效的随机访问,适合下标操作。 在尾部插入/删除效率高(O(1)均摊),但在中间或头部插入删除较慢(O(n))。 频繁插入建议使用 emplace_back 替代 push_back,减少临时对象开销。 避免频繁扩容,可提前调用 reserve() 预分配空间。 清空 vector 并不释放内存,如需释放可使用 swap 技巧:
std::vector().swap(vec); // 交换后原vec变为空且释放内存 不要保存指向 vector 元素的指针或迭代器,在插入可能导致重新分配,使它们失效。基本上就这些。vector 使用简单但功能强大,掌握它的核心用法,能大幅提升 C++ 编程效率。
以上就是c++++中vector怎么使用_vector容器核心用法详解的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477020.html
微信扫一扫
支付宝扫一扫