C++之初识STL—vector
文章目录
- STL基本概念
- 使用STL的好处
- 容器
- vector
- 1.vector容器简介
- 2.vector对象的默认构造函数
- 3.vector对象的带参构造函数
- 4.vector的赋值
- 5.vector的大小
- 6.vector容器的访问方式
- 7.vector的插入
STL基本概念
- STL(Standard Template Library,标准模板库)
- STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator)
- 迭代器:算法通过迭代器访问容器里面的数据
- 容器和算法之间通过迭代器进行无缝连接。
- STL 几乎所有的代码都采用了模板类或者模板函数,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会
使用STL的好处
- STL是C++的一部分,因此不需要额外安装什么,被内建在你的编译器里面
- STL的一个重要特点是将数据结构和算法分离
- 程序员不用思考STL的实现过程
- STL具有高可用性,高性能,高移植,跨平台优点
容器
序列式容器:
- 序列式容器每个元素都有固定位置–取决于插入的时机和地点,和元素值无关。
- vector,deque、list、stack、queue
关联式容器:
- 元素位置取决于特定的排序准则,和插入顺序无关
- set、multiset、map、multimap


vector
1.vector容器简介
- 尾部插入速度比较快
- vector是将元素置于一个动态数组中加以管理的容器
- vector可以随机存取元素(支持索引值直接存取)
- vector尾部添加或移除元素的速度非常快速,但是在头部插入或移除元素比较费时
2.vector对象的默认构造函数
vector<class T>vecT;
vector<int>vecInt;
vector<float>vecFloat;
vector<string>vecString;class A{};
vector<A>vecA; //用于存放CA对象的vector容器,
//由于容器元素的存放是按值复制的方式进行,所以此时CA必须提供CA的拷贝构造函数,以保证CA对象间拷贝正常vector<A*>vecpA; //用于存放CA对象指针的vector容器
3.vector对象的带参构造函数
理论知识:
- vector(beg,end); //构造函数将[beg,end)区间中的元素拷贝给本身,注意该区间左闭右开
- vector(n,elem);//构造函数将n个elem拷贝给本身
- vector(const vector& vec); //拷贝构造函数
int main()
{int arr[] = { 1,2,3,4,5 }; //用两个指针构造vector<int>v1(arr, arr + 5);vector<int>v2(3, 10);//存储3个10for (int i = 0; i < v2.size(); i++){cout << v2[i] << " ";}cout << endl;vector<int>v3(v1);//用一个已经构造好的对象初始化新的对象for (int i = 0; i < v1.size(); i++){cout << v3[i] << " ";}
}

4.vector的赋值
- vector.assign(beg,end);//将[beg,end)区间中的元素拷贝赋值给本身,注意该区间左闭右开
- vector.assign(n,elem);//将n个elem拷贝赋值给本身
- vector& operator=(const vector& vec);//重载等号操作符
- vector.swap(vec); //将vec与本身的元素互换
int main()
{vector<int>vecIntA(3, 10);vector<int> vecIntB, vecIntC, vecIntD;int iarray[] = { 0,1,2,3,4 };//将数组iarray中的所有元素赋值给vactorIntA容器vecIntA.assign(iarray, iarray + 5);cout << "A:";for (int i = 0; i < vecIntA.size(); i++){cout <<vecIntA[i] << " ";}cout << endl;//将vecIntA中所有元素赋值给vecIntBvecIntB.assign(vecIntA.begin(), vecIntA.end());cout << "B1:";for (int i = 0; i < vecIntB.size(); i++){cout <<vecIntB[i] << " ";}cout << endl;cout << "B2:";vecIntB.assign(vecIntA.begin()+2, vecIntA.end()-1);for (int i = 0; i < vecIntB.size(); i++){cout << vecIntB[i] << " ";}cout << endl;//将4个10拷贝到vecIntCvecIntC.assign(4, 10);cout << "C:";for (int i = 0; i < vecIntC.size(); i++){cout<< vecIntC[i] << " ";}cout << endl;//互换元素vecIntB.swap(vecIntC);cout << "B2:";for (int i = 0; i < vecIntB.size(); i++){cout <<vecIntB[i] << " ";}cout << endl;cout << "C:";for (int i = 0; i < vecIntC.size(); i++){cout << vecIntC[i] << " ";}cout << endl;//重载赋值运算符vecIntD = vecIntC;cout << "D:";for (int i = 0; i < vecIntD.size(); i++){cout << vecIntD[i] << " ";}return 0;
}

5.vector的大小
- vector.size(); //返回容器中元素的个数
- vector.empty(); //判断容器是否为空
- vector.resize(); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除
- vector.resize(num,elem);//重新指定容器的长度为num,若容器变长,则以elem填充新位置。如果容器变短,则末尾超出容器长度的元素被删除
int main()
{vector<int>v1;cout << "v1.size: " <<v1.size()<< endl;if (v1.empty()) //判断容器是否为空{cout << "v1 is empty" << endl;}int array[] = { 1,2,3,4,5 };v1.assign(array, array + 5);//将容器的长度变长v1.resize(10);for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;//将容器长度变短v1.resize(3);for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;//将容器长度变长,并且扩展出来的新的元素为指定的值v1.resize(10, 100);for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;return 0;
}

6.vector容器的访问方式
- vec.at[idx]; //返回索引idx所指数据,如果idx越界,抛出out_of_range异常
- vec[idx]; //返回索引idx所指的数据,越界时,运行直接报错

7.vector的插入
- 在vector末尾进行插入:push_back、在末尾删除元素:pop_back
- vector.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置
- vector.insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值
- vector.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值
int main()
{int arr[] = { 1,2,3,4,5 };vector<int>v1(arr, arr + 5);//在末尾插入函数v1.push_back(10);//在末尾删除函数v1.pop_back();//在指定位置插入一个指定元素v1.insert(v1.begin()+3,100); //注意第一个参数不能为下标,应该为指针for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;//在指定的位置插入多个元素v1.insert(v1.begin() + 3, 3, 1000);//在下标为3的位置上插入3个1000for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;//将指定的区间中的元素插入到指定的位置上,将50—80插入int b[] = { 40,50,60,70,80,90 };v1.insert(v1.begin() + 7, b + 1, b + 5);for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;
}
相关文章:
C++之初识STL—vector
文章目录 STL基本概念使用STL的好处容器vector1.vector容器简介2.vector对象的默认构造函数3.vector对象的带参构造函数4.vector的赋值5.vector的大小6.vector容器的访问方式7.vector的插入 STL基本概念 STL(Standard Template Library,标准模板库)STL 从广义上分为: 容器(con…...
资讯汇总230503
230503 12:21 【放松身心亲近自然 自驾露营成旅游新风尚】今年“五一”假期,我国旅游业的快速恢复催生自驾露营休闲游、短途游、夜游等新型旅游产品提质升级。快速发展的新兴旅游业态,在促进旅游消费、培育绿色健康生活方式等方面发挥了积极作用…...
C++之编程规范
目录 谷歌C风格指南:https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/contents/ 编码规则: • 开闭原则:软件对扩展是开放的,对修改是关闭的 • 防御式编程:简单的说就是程序不能崩溃 •…...
ChatGPT做PPT方案,10组提示词方案!
今天我们要搞定的PPT内容是: 活动类型:节日活动、会员活动、新品活动分析类型:用户分析、新品立项、项目汇报内容类型:内容规划、品牌策划 用到的工具: mindshow 邀请码 6509097ChatGPT传送门(免费使用…...
分布式夺命12连问
分布式理论 1. 说说CAP原则? CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)这3个基本…...
sourceTree离线环境部署
目录 1、下载sourceTree安装包,打开之后弹出注册界面(需要去国外网站注册)2、使用技术手段跳过注册步骤3、打开安装包进行安装 注:建议提前安装好git 1、下载sourceTree安装包,打开之后弹出注册界面(需要去…...
6.1.1 图:基本概念
一,基本概念 1.基本定义 (1)图的定义 顶点集不可以是空集,但边集可以是空集。 (2) 有向图的表示: 圆括号 无向图的表示: 尖括号 简单图、多重图: 简单图:…...
SlickEdit for Windows and Linux crack
SlickEdit for Windows and Linux crack 现在可以在“新建注释”对话框中对颜色进行排序,使调色板中的颜色阵列看起来更符合逻辑。 在拆分或扩展行注释时添加了撤消步骤,这样您只需点击“撤消”一次即可撤消行注释扩展。 已更新VHDL颜色编码,…...
ChatGPT实现stackoverflow 解释
stackoverflow 解释 ChatGPT 公开服务以来,程序员们无疑是最早深入体验和"测试"的一批人。出色的效果也引发了一系列知识产权上的争议。著名的 stackoverflow 网站,就宣布禁止用户使用 ChatGPT 生成的内容来回答问题,一经发现&…...
第五章 作业(123)【编译原理】
第五章 作业【编译原理】 前言推荐第五章 作业123 随堂练习课前热身04-17随堂练习04-17课前热身04-24 最后 前言 2023-5-3 22:12:46 以下内容源自《【编译原理】》 仅供学习交流使用 推荐 第四章 作业(123)【编译原理】 第五章 作业 1 1.令文法G为…...
基于Vue的个性化网络学习笔记系统
1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和验证码,然后对登录进来的用户判断身份信息,判断是管理员用户还是普通用户。 2.系统用户管理:不管是…...
如何搭建一个HTTP实验环境
这一讲是“破冰篇”的最后一讲,我会先简单地回顾一下之前的内容,然后在 Windows 系统上实际操作,用几个应用软件搭建出一个“最小化”的 HTTP 实验环境,方便后续的“基础篇”“进阶篇”“安全篇”的学习。 “破冰篇”回顾 HTTP …...
Electron 环境搭建
https://start.spring.io/ 在线数据分析网站 https://tj.aldwx.com/ https://www.spsspro.com/ win10如何分屏 拖到边缘 Electron 环境搭建 https://www.electronjs.org/zh/docs/latest/tutorial/%E6%89%93%E5%8C%85%E6%95%99%E7%A8%8B electron 隐藏菜单 electron 标题栏 设…...
农机电招平台~java
摘要 随着农机电招行业的不断发展,农机电招在现实生活中的使用和普及,农机电招行业成为近年内出现的一个新行业,并且能够成为大群众广为认可和接受的行为和选择。设计农机电招平台的目的就是借助计算机让复杂的销售操作变简单,变…...
springboot+vue体质测试数据分析及可视化设计(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的体质测试数据分析及可视化设计。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者&a…...
thinkphp+vue+html高校固定资产管理系统维修 租借4h80u
本高校资产管理系统采用的数据库是Mysql,使用thinkphp框架开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。运行环境:phpstudy/wamp/xammp等 开发语言:php 后端框…...
【学习笔记】「北大集训 2021」经典游戏
我觉得很厉害。要是考场上能把这道题切了的话数据结构的水平肯定是不低的。 考虑简化版问题:如果只询问一个点的答案怎么做。 注意,我这么做是有风险的。我把战线拉长了。不过当然,如果连简化版的问题都做不了,那何谈正解&#…...
优惠卷秒杀功能、全局唯一ID、乐观锁解决超卖问题、悲观锁实现一人一单、集群下锁失效问题
文章目录 1 全局唯一ID的需求分析2 Redis实现全局唯一Id3 添加优惠卷4 实现秒杀下单5 库存超卖问题分析6 乐观锁解决超卖问题6 悲观锁实现一人一单7 集群环境下的并发问题 1 全局唯一ID的需求分析 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单…...
Nest的基本概念,以及如何使用Nest CLI来构建一个简单的Web应用程序
Nest是一个用于构建高效、可扩展的Node.js服务器端应用程序的框架。它是基于Express.js构建的,并且提供了多种新特性和抽象层,可以让开发者更加轻松地构建复杂的应用程序。 本文将介绍Nest的基本概念,以及如何使用Nest CLI来构建一个简单的W…...
15个创新世界119座城:1~10章音频
感恩每一个喜欢我文字的朋友,感恩每一次遇见。 最近后台总有朋友留言,能不能每一章配上音频,这样平时开车或挤地铁时也能听听。 谢谢你们在开车和挤地铁的时候都会产生听这本书的冲动。 五一抽空先把前十章的音频转录出来,希望你们…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
