【C++】vector

发布时间:2026/9/18 22:01: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/9/18 8:53:09

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

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

2026/9/13 12:55:17

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

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

2026/9/18 21:58:05

基于Hyperledger Fabric的区块链监理管理系统搭建全解析

简介:PPT系统阐述了雄安集团区块链监理管理系统的建设背景、总体方案与核心功能,面向工程建设监管方、监理单位及信息化规划人员,重点解决大规模建设期质量安全精准管控、监理费用机制改革、信用客观考评等矛盾。内容围绕“一云两级三端”网络…

2026/9/18 21:58:05

oh-my-hermes:React Native 中 Hermes 配置管理的统一实践

去年年底,我们团队在做一个 React Native 项目重构时,被 Hermes 引擎的配置问题折磨得够呛。项目跑起来之后,启动耗时、内存占用、包体积这些指标都差强人意,但每次调参都要钻进 gradle 脚本、AndroidManifest、MainApplication.j…

2026/9/18 21:53:05

计算机网络八股文:TCP 与 UDP 两万字详解

一、计算机网络体系结构基础在正式进入 TCP 和 UDP 之前,有必要先理解计算机网络为什么要分层、每一层分别负责什么。因为只有搞清楚「TCP 和 UDP 位于哪一层、它们的下层依赖什么、上层又为谁服务」,才能真正理解这两个传输层协议的定位、设计动机以及它…

2026/9/18 14:13:01

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/18 0:01:09

Google Colab 实战:运行模型、数据加载与报错排查

1. 为什么我劝你先搞懂 Colab 的运行模型1.1 Colab 到底是什么,跟本地跑代码差在哪Google Colab 简单说就是一台跑在浏览器里的 Linux 虚拟机,你打开一个 Notebook,背后就连上了一台带 GPU 的远程机器。你在单元格里敲的每一行 Python&#x…

2026/9/18 0:01:09

C语言数据类型与表达式详解

1. C语言数据与数据类型概述在C语言编程中,数据是程序处理的核心对象。理解数据的分类和特性是掌握C语言的基础。C语言中的数据主要分为四大类:常量、变量、表达式和函数。这些数据类型构成了C语言程序的基本元素,每种类型都有其独特的特性和…

2026/9/18 0:01:09

SQL时间字段指定时间段查询:区间语义、索引与时区避坑

上周排查一个线上问题&#xff0c;用户反馈"昨天的订单一条都没查到"&#xff0c;但数据库里明明躺着两千多条。最后定位下来&#xff0c;不是数据丢了&#xff0c;也不是接口挂了&#xff0c;而是那个查询条件把时间段写成了> 2024-05-20 00:00:00 AND < 2024…

2026/9/18 14:13:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/18 14:13:02

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/18 14:13:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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