【C++】vector

发布时间:2026/11/15 10:18:50

【C++】vector vector 内部六大核心类型别名value_type定义容器存放的原始元素类型作用 通用模板编程时不知道容器元素类型用它代表元素。// value_type 容器存储的容器类型 /*vectorint::value_type num 100; cout value_type : num endl;*/reference / const_referencereference等价于 value_type普通左值引用可读可改容器元素。//reference :元素左值引用 int //vec.push_back(1); //vectorint::reference ref vec[0]; //ref 200; //cout reference修改后元素 vec[0] endl;const_reference等价于 const value_type常量只读引用只能读取禁止修改。]//const_reference: 只读引用 const int //vec.push_back(1); //vectorint::const_reference cref vec[0]; ///*cref 100;*/ //编译报错 ,只读引用 不能修改 //cout 只读引用 const_reference : cref endl;使用场景函数返回容器元素引用返回 reference 允许外部修改返回 const_reference 保护容器数据只读。size_type用途---》表示容器元素个数、容量、下标索引。底层类型--无符号整数本质是 size_tunsigned 类型// size_type 无符号整数存容量个数 //vec.push_back(1); //vec.push_back(2); //vec.push_back(3); //vec.push_back(4); //vectorint::size_type cnt vec.size(); //cout size_type类型元素个数 cnt endl;difference_type底层类型--有符号整数 ptrdiff_tsigned 类型用途--专门存两个迭代器之间的差值迭代器相减的返回值类型为啥用 有符号 difference_type--迭代器可以前减后得到负数反向距离无符号 size_t 存不了负数//difference_type : 有符号整数迭代器差值 //vec.push_back(985); //vec.push_back(211); //auto it1 vec.begin(); //auto it2 vec.end(); //cout difference_type迭代器距离 it2 - it1 endl;iterator /const_iterator迭代器iterator读写迭代器普通可修改迭代器指向容器元素支持读写。//普通读写迭代器 iterator //vec.push_back(1); //vectorint::iterator it vec.begin(); //*it 985; //cout iterator修改后 *it endl;const_iterator只读迭代器常量迭代器只能读取元素不能修改内容。//只读迭代器 const_iterator //vec.push_back(1); //vectorint::const_iterator cit vec.begin(); ///**cit 211;*/ //编译报错 只读迭代器只能读不能修改 //cout *cit endl;begin() 返回 iterator / cbegin() 返回 const_iterator构造默认构造语法容器类型 变量名;创建空 vector没有任何元素.empty() 返回 true输出 1• size 0不能直接用 c1[0] 访问越界崩溃。适用场景先创建空容器后续再 push_back 添加数据。//默认构造 /*vectorintv1; v1.push_back(1); cout 默认构造,是否为空 boolalpha v1.empty() endl;*/拷贝构造语法C c(另一个同类型容器)--把已经存在的容器拷贝给新创建的容器//拷贝构造 C c2(c1) //vectorintc2{ 10,20,30 }; //vectorintc3(c2); //for (auto v : c3) //{ // cout v ; // /*}*/区间构造语法C c(起始迭代器, 末尾迭代器)拷贝 [begin, end) 区间内的元素左闭右开不限制必须是同一个 vector可以拷贝数组、其他容器的一段//区间构造 C (c,e) /*vectorintc2{ 10,20,30 }; vectorintc3(c2.begin(), c2.end()); cout 容器c3的首元素 c3[0] endl;*/列表初始化C11 及以后支持的初始化列表语法• 直接传入一组元素自动创建 vector 并存入• 下标从 0 开始c5 [0]1c5 [1]3c5 [2]5c5 [3]7• 也可写成 vectorint c5 {1,3,5,7};//列表初始化 C c{a,b,c,d,e,f} vectorintv1{ 1,2,3,4,5,6,7 }; cout 列表初始化第4个元素 v1[3] endl;补充vector 三大核心知识点深拷贝深拷贝包括拷贝构造 / 区间构造赋值运算符也是深拷贝 c1c2核心原理vector 的拷贝构造、区间拷贝都会分配全新堆内存新容器与原容器数据完全独立修改其中一个不会影响另一个。//深拷贝--开辟独立内存 vectorintv1 { 10,20,30,40,50 }; vectorintv2(v1); v2[0] 985; cout v2[0] v2[0] endl; //985 cout v1[0]: v1[0] endl; // 输出10,原容器数据不受影响下标访问 [] 越界风险关键特性:vector::operator[] 不做边界检查编译阶段不会报错运行时访问超出 size () 的下标直接越界访问非法内存程序崩溃 / 乱码。安全写法先扩容存入元素再访问下标带边界检查的安全访问at() 函数越界会抛出 out_of_range 异常//operator [] 下标访问 不检查会造成越界程序崩溃 vectorintv1 { 1,2,3,4,5 }; vectorint::iterator res v1.begin(); cout res[0] endl; /*cout res[10] endl;*/ // 程序崩溃 //避免程序崩溃的两种方法 //方法1先扩容存入元素再访问下标 vectorintv2; v2.push_back(10); cout v2[0] endl; //方法2带边界检查的安全访问 at函数 cout v2.at(0) endl;拷贝构造 vs 引用核心区分记忆不带 创建全新容器深拷贝带 只是原容器别名不分配新内存
延伸阅读

更多相关文章

2026/11/14 17:31:10

Cheat Engine 内存修改原理与逆向工程入门指南

1. 项目概述:从“作弊”到“理解”的桥梁“最实用的游戏数据修改器”,这个标题听起来有点“邪道”,但背后其实是一个庞大且充满技术趣味的领域。很多朋友第一次接触这类工具,可能是为了在单机游戏里“爽一把”,比如无限…

2026/11/12 7:30:22

AI赋能CTF实战:构建智能解密工具的设计思路与核心实现

1. 项目概述:当AI遇见CTF,一场效率革命最近几年,CTF(Capture The Flag)比赛的火爆程度有目共睹,从校园社团到企业安全团队,再到国际顶级赛事,它几乎成了衡量安全人员实战能力的“金标…

2026/11/14 18:58:40

Oracle PL/SQL从入门到实战:环境搭建、核心语法与性能优化指南

1. 项目概述:为什么是PL/SQL?如果你接触过Oracle数据库,哪怕只是写过几句简单的SELECT * FROM emp,大概率也听说过PL/SQL这个名字。它不像Java或Python那样是独立的编程语言,而是Oracle数据库的“原生扩展”。简单来说…

2026/11/15 10:14:06

文县电工证怎么考良心建议全攻略

文县电工证怎么考良心建议全攻略 之前考的证在外省能不能转过来?这可能是很多电工同行的共同疑问。别急,我来给你说个 良心建议 ,帮你省下冤枉钱,少走弯路。文县电工证怎么考?答案其实并不复杂,关键是你得知道该怎么做,不该怎么做。…

2026/11/15 10:14:06

电工证怎么复审一次2026河南最新政策

电工证怎么复审一次2026河南最新政策 证书过期了不知道怎么复审延期?2026年河南最新政策已经明确,电工证的复审不再是“走过场”,而是需要严格按照流程办理,否则不仅影响工作,还可能面临处罚。本文围绕“电工证怎么复审一次”这一关键词,结合焦…

2026/11/15 10:09:06

考电工证没有证书怎么考?多久拿证?别怕考不过白交钱

考电工证没有证书怎么考?多久拿证?别怕考不过白交钱 怕考不过白交培训费?你不是一个人。很多想考电工证的朋友,在报名前最大的顾虑就是“没有证书怎么考”,尤其是新手,连报名流程都不清楚,更别说考试准备了。其实,很多人对“考电工证没有证书”的理解…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 4:46:37

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/15 2:06:31

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑