当前位置: 首页 > news >正文

【cpp Trip第1栈】vector

C++ vector 常用用法大全

vector 是 C++ 标准模板库(STL)中的一个动态数组容器,它能够自动管理内存,支持快速随机访问。以下是 vector 的常用用法:

1. 基本操作

创建和初始化

#include
using namespace std;

vector v1; // 空vector
vector v2(5); // 包含5个元素,默认值为0
vector v3(5, 10); // 包含5个元素,每个都是10
vector v4 = {1, 2, 3}; // 列表初始化
vector v5(v4); // 拷贝构造
vector v6(v5.begin(), v5.end()); // 通过迭代器范围构造

访问元素

v[0] = 10; // 使用下标访问(不检查边界)
v.at(1) = 20; // 使用at()访问(会检查边界,越界抛出异常)
int first = v.front(); // 访问第一个元素
int last = v.back(); // 访问最后一个元素
int* data = v.data(); // 获取指向底层数组的指针

容量操作

bool isEmpty = v.empty(); // 判断是否为空
size_t size = v.size(); // 获取元素数量
size_t cap = v.capacity(); // 获取当前容量
v.reserve(100); // 预留空间,避免多次重新分配
v.shrink_to_fit(); // 减少容量以适应大小

2. 修改操作

添加元素

v.push_back(10); // 在末尾添加元素
v.emplace_back(20); // 在末尾构造元素(更高效)
v.insert(v.begin(), 5); // 在指定位置插入元素
v.insert(v.begin(), 3, 5); // 在指定位置插入多个相同元素
v.insert(v.begin(), {1,2,3}); // 插入初始化列表

删除元素

v.pop_back(); // 删除最后一个元素
v.erase(v.begin()); // 删除指定位置的元素
v.erase(v.begin(), v.begin()+2); // 删除范围内的元素
v.clear(); // 清空所有元素

调整大小

v.resize(10); // 调整大小为10,新增元素默认初始化
v.resize(15, 5); // 调整大小为15,新增元素初始化为5

3. 迭代器操作

// 正向迭代器
for(auto it = v.begin(); it != v.end(); ++it) {
cout << *it << " ";
}

// 反向迭代器
for(auto it = v.rbegin(); it != v.rend(); ++it) {
cout << *it << " ";
}

// 常量迭代器
for(auto it = v.cbegin(); it != v.cend(); ++it) {
// *it = 10; // 错误,不能修改
}

4. 算法操作

vector 可以与 STL 算法配合使用:
#include

sort(v.begin(), v.end()); // 排序
reverse(v.begin(), v.end()); // 反转
auto it = find(v.begin(), v.end(), 10); // 查找元素
int cnt = count(v.begin(), v.end(), 5); // 计数

5. 二维和多维 vector

vector<vector> matrix(5, vector(5)); // 5x5矩阵

// 初始化二维vector
vector<vector> mat = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

// 访问元素
int val = mat[1][2]; // 获取第2行第3列元素

6. 性能优化技巧

// 预先分配足够空间避免多次重新分配
vector v;
v.reserve(1000);

// 使用emplace_back代替push_back避免临时对象
v.emplace_back(10); // 比 v.push_back(10) 更高效

// 移动语义减少拷贝
vector v2 = std::move(v1); // v1的资源被移动到v2

7. 其他有用操作

// 交换两个vector
vector v1 = {1, 2, 3};
vector v2 = {4, 5, 6};
v1.swap(v2);

// 比较两个vector
if(v1 == v2) {
// 只有当所有元素都相等时才为true
}

// 获取最大可能的大小
size_t max_size = v.max_size();

vector 是 C++ 中最常用的容器之一,它提供了动态数组的功能,同时保持了数组的随机访问效率。掌握这些常用操作可以大大提高编程效率。


文章转载自:

http://JQEC1R9d.wLggr.cn
http://t6c0EA1I.wLggr.cn
http://9xGcV3Fb.wLggr.cn
http://h2Mo2hzI.wLggr.cn
http://a3IHJAIz.wLggr.cn
http://T7ZEK2xb.wLggr.cn
http://qyYDRdIg.wLggr.cn
http://vxmDncLi.wLggr.cn
http://lxLCoII0.wLggr.cn
http://orn3fWWO.wLggr.cn
http://OER5wQrn.wLggr.cn
http://8JgPGOMP.wLggr.cn
http://SSjAowMY.wLggr.cn
http://XvlKaT49.wLggr.cn
http://RXbzycgM.wLggr.cn
http://1JbZ6Ua9.wLggr.cn
http://hIbuKPb4.wLggr.cn
http://4p8sbDJ6.wLggr.cn
http://lIj1BXom.wLggr.cn
http://iurlZyqe.wLggr.cn
http://dor5NIWh.wLggr.cn
http://h0qjNTKx.wLggr.cn
http://50Eba9Xa.wLggr.cn
http://p8K7gAGK.wLggr.cn
http://hf8DhXYh.wLggr.cn
http://eg1kw084.wLggr.cn
http://MffRxhzR.wLggr.cn
http://4yot8XSr.wLggr.cn
http://En1Mls26.wLggr.cn
http://bklqkbjz.wLggr.cn
http://www.dtcms.com/a/383998.html

相关文章:

  • 详解 new 和 delete
  • 基于PassGAN的密码训练系统设计与实现
  • 避开Java日期格式化陷阱:`yyyy`与`YYYY`的正确使用
  • SpringCloud与Dubbo实战对决:从协议到治理的全维度选型指南(一)
  • SAP HANA Scale-out 04:CalculationView优化
  • 删除文件夹里的网盘图标
  • MPC模型预测控制:一种先进的控制策略
  • 【数据集】基于观测的全球月度网格化海表pCO₂与海气CO₂通量产品及其月气候平均值
  • RS485简介
  • Claude Code vs Codex
  • 多语言编码Agent解决方案(5)-IntelliJ插件实现
  • 光纤入户技术:原理、策略与市场博弈
  • DeerFlow实践: 日程管理智能体应用框架设计
  • spring、springboot、springCloud
  • Thymeleaf
  • 美团首款AI Agent产品“小美”公测,AI会带来什么?
  • 在 UE5 中配置 SVN 版本工具
  • Qwen3 模型结构解析
  • class_8:java继承
  • Django模型与数据库表映射的两种方式
  • 国产化监控方案:金仓数据库 + Nagios 从零搭建指南,核心指标实时掌握
  • 【Linux探索学习】第一篇Linux的基本指令(1)——开启Linux学习第一篇
  • 关于android.permission.CAPTURE_AUDIO_OUTPUT
  • Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
  • Redis和数据库的一致性
  • 使用node-Express框架写一个学校宿舍管理系统练习项目-前后端分离
  • 上下文工程实践 - 工具管理(上篇)
  • Spring Boot 项目瘦身实战
  • 【git基础】关于新仓库创建的几种方式
  • Dify 中的上下文变量以及它们与 system、user 变量的关系和配合方式