【C++】vector

发布时间:2026/10/14 9:54:08

【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/10/10 9:15:49

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

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

2026/10/14 15:57:01

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

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

2026/10/15 6:13:14

TensorFlow 1.x模型保存恢复不重定义结构实战指南

1. 项目概述:为什么“保存-恢复模型不重定义结构”是TensorFlow 1.x时代的关键生存技能在2017—2019年TensorFlow 1.x主流应用期,我带过三个不同方向的落地项目:某高校实验室的遥感图像语义分割系统、某工业质检公司的缺陷检测轻量模型、还有…

2026/10/15 6:13:14

从零搭建TCP客户端与服务端:Socket编程实战与避坑指南

兄弟们,聊点网络编程里最实在的东西。你可能看过各种高大上的分布式架构、微服务、容器编排,但说句掏心窝子的话,这些东西的底层,基本都跑不脱最基础的TCP/IP。数据从一个进程飞到另一个进程,靠的就是创建socket、建立…

2026/10/15 6:13:14

国产算力适配层开源:大模型推理部署的底层工程实践

1. 这次开源的到底是什么,为什么说它不是模型先把结论摆在前面:这次放出来的东西,不是又一个能陪你聊天的对话模型,也不是某个榜单上刷分的推理大模型,而是一整套让大模型能在国产算力芯片上真正跑起来、跑得稳、跑得高…

2026/10/15 6:13:14

作文课件PPT制作全流程:从目标拆解到AI工具实战

备课时间紧张的时候,作文课件最容易变成“素材搬运工具”:网上找个模板,把题目、范文、好词好句往里一塞,页数不少,但上课时学生抬头率低、写得还是不会写。我整理过一套自己做“作文课件PPT”的完整流程,从…

2026/10/15 6:13:14

MiniMax API 调用教程:兼容 OpenAI 写法

照着 MiniMax 官方示例改了半天,请求还是 401,或者返回一串 gateway_error,这类问题多半出在 base_url 和模型调用名没对上。你手里可能已经有一把能用的 API Key,也装了 openai 包,但第一个调用就是跑不通。这篇教程不…

2026/10/15 6:08:14

杰理BLE功耗从185uA压到18uA:可复现的降功耗实战笔记

简介:这份PDF资料聚焦杰理BLE芯片的功耗数据与降功耗方法,面向正在开发蓝牙低功耗产品、遇到功耗降不下来或无法满足客户续航要求的嵌入式工程师。内容以AC6321为例,系统梳理powerdown、poweroff、sniff三种功耗模式的特点与唤醒机制&#xf…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/14 17:41:07

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/14 2:32:55

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/15 0:02:22

防关联浏览器哪个好?三款产品实测差异解析

新手做多店铺,最纠结的就是防关联浏览器选哪个。飞跨、网易、站斧这三款被问得最多,先给结论:要一体化省心、长期便宜,选站斧;要网易招牌和稳,选网易;预算紧做东南亚 Lazada,选飞跨。…

2026/10/15 0:02:22

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成 一、技术背景 大模型(LLM)在通用场景下表现强大,但当我们将 GPT-4 或 Qwen 直接用于生成影刀RPA操作指令和 XPath 定位时,准确率通常只有 40%-60%。原因…

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

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

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