c++ -- STL容器--vector

news2024/11/7 17:55:15

STL中最常用的容器为Vector,可以理解为数组

3.vector容器

3.1 简介

① vector数据结构和数组非常相似,也称为单端数组。

② vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展。

③ 动态扩展并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。

④ vector容器的迭代器是支持随机访问的迭代器。

3.2 构造函数

① 功能描述:创建vector容器

② 函数原型:

  1. vector v;

  1. vector(v.begin(), v,end()); //将v[begin().end())区间(前闭后开)中的元素拷贝给本身。

  1. vector(n, elem); //构造函数将n个elem拷贝给本身

  1. vector(const vector &vec); //拷贝构造函数

运行结果:

  • 0 1 2 3 4 5 6 7 8 9

  • 0 1 2 3 4 5 6 7 8 9

  • 100 100 100 100 100 100 100 100 100 100

  • 100 100 100 100 100 100 100 100 100 100

  • 请按任意键继续. . .

3.3 赋值操作

① 功能描述:给vector容器进行赋值。

② 函数原型:

  1. vector& operator=(const vector &vec); //重载等号操作符。

  1. assign(beg,end); //将[beg,end)区间中的数据拷贝赋值给本身。

  1. assign(n,elem); //将n个elem拷贝赋值给本身。

③ vector赋值方式比较简单,使用operator=,或者assign都可以。

运行结果:

  • 0123456789

  • 0123456789

  • 0123456789

  • 100100100100100100100100100100

  • 请按任意键继续. . .

3.4 容量和大小

① 功能描述:对vector容器的容量和大小操作。

② 函数原型:

//判断容器是否为空

  1. empy();

//容器的容量

  1. capacity();

//返回容器中元素的个数

  1. size();

//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。

//如果容器变短,则末尾超出容器长度的元素被删除。

  1. resize(int num);

//重新指定容器的长度为num,若容器变成,则以elem值填充新位置。

//如果容器变短,则末尾超出容器长度的元素被删除。

  1. resize(int num, elem);

③ vector 容器的容量(用 capacity 表示),指的是在不分配更多内存的情况下,容器可以保存的最多元素个数;而 vector 容器的大小(用 size 表示),指的是它实际所包含的元素个数。

④ vector 容器的大小不能超出它的容量,在大小等于容量的基础上,只要增加一个元素,就必须分配更多的内存。注意,这里的“更多”并不是 1 个。换句话说,当 vector 容器的大小和容量相等时,如果再向其添加(或者插入)一个元素,vector 往往会申请多个存储空间,而不仅仅只申请 1 个。

⑤ 一旦 vector 容器的内存被重新分配,则和 vector 容器中元素相关的所有引用、指针以及迭代器,都可能会失效,最稳妥的方法就是重新生成。

运行结果:

  • 0123456789

  • v1不为空:

  • capacity容量:13

  • v1的大小为:10

  • 012345678900000

  • 012345678900000100100100100100

  • 01234

  • 请按任意键继续. . .

3.5 插入删除

① 功能描述:对vector容器进行插入、删除操作。

② 函数原型:

  1. push_back(ele); //尾部插入元素ele

  1. pop__back(); //删除最后一个元素

  1. insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele

  1. insert(const_iterator pos, int count ele); //迭代器指向位置pos插入count个元素

  1. erase(const_iterator pos); //删除迭代器指向的元素

  1. erase(cons_titerator start, const_iterator end); //删除迭代器从start到end之间的元素

  1. clear(); //删除容器中所有元素

运行结果:

  • 10 20 30 40 50

  • 10 20 30 40

  • 100 10 20 30 40

  • 999 999 100 10 20 30 40

  • 999 100 10 20 30 40

  • 请按任意键继续. . .

3.6 数据存取

① 功能描述:对vector中的数据存取操作。

② 函数原型:

  1. at(int idx); ///返回索引idx所指的数据。

  1. operator[]; //返回索引idx所指的数据。

  1. front(); //返回容器中第一个数据元素

  1. back(); //返回容器中最后一个数据元素

③ 除了用迭代器获取vector容器中元素,[]和at也可以。

④ front返回容器第一个元素。

⑤ back返回容器最后一个元素。

运行结果:

  • 0 1 2 3 4 5 6 7 8 9

  • 0 1 2 3 4 5 6 7 8 9

  • 第一个元素为:0

  • 最后一个元素为:9

  • 请按任意键继续. . .

3.7 互换容器

① 功能描述:实现两个容器内元素进行互换。

② 函数原型:swao(vec); //将vec与本身的元素互换

③ swap可以使两个容器互换,可以达到实用的收缩内存效果。

运行结果:

  • 交换前:

  • 0 1 2 3 4 5 6 7 8 9

  • 10 9 8 7 6 5 4 3 2 1

  • 交换后:

  • 10 9 8 7 6 5 4 3 2 1

  • 0 1 2 3 4 5 6 7 8 9

  • v的容量为:138255

  • v的大小为:100000

  • v的容量为:138255

  • v的大小为:3

  • v的容量为:3

  • v的大小为:3

  • 请按任意键继续. . .

3.8 预留空间

① 功能描述:减少vector在动态扩展容量时的扩展次数。

② 函数原型:

  1. reserve(int len); //容器预留len个元素长度,预留位置不初始化,元素不可访问。

运行结果:

  • num:30

  • num:1

  • 请按任意键继续. . .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/142271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库(tidb、clickhouse、hive)概念笔记

目录 1、有哪些分布式数据库 2、OLAP、OLTP、HTAP 3、TIDB、clickhouse、hive 一、TIDB 1. TiDb 核心特性: 2. TiDb 整体架构: 3.TiDB 存储: 二、clickhouse 三、hive 1.什么是 Hive? 2.Hive 架构和如何运作&#xff1…

KMP -- 代码求解next数组

代码求解next数组 1. KMP相关概念 前缀:包含首位字符但不包含末位字符后缀:包含末位字符但不包含首位字符next数字:主串与模式串不匹配时,模式串需要回退的位置next[j]:第 j 位字符前面的j-1位字符组成的字串的前后缀…

QGIS查看属性和选择要素

目录1. 查看属性和选择要素2. 调整图层样式,添加自动标注1. 查看属性和选择要素 #pic_center x400 暂时移除,不是删除,它还是存在它本来的位置,用的时候再次添加即可。 选择工具 点完工具后,点击图中一个点&#xf…

c++ -- STL容器--stack容器

5. stack容器5.1 简介① stack是一种先进后出的容器,它只有一个出口。② 栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为。③ 栈中进入数据称为:入栈 push④ 栈中弹出数据称为:出栈 pop5.2 常用接口① 功能描述&…

蓝桥杯STM32G431RBT6学习——GPIO

蓝桥杯STM32G431RBT6学习——GPIO GPIO外设分布 国信长天开发板使用的STM32G431RBT6为LQFP64的封装,可用的GPIO为49个,包括如下: PA0~PA15 PB0~PB15 PC0~PC15 PD2,PF0,PF1,PG10 其中PF0与PF1用于连接外部…

前端入门笔记 02 —— CSS

CSS标签通常要配合html或者js使用 CSS本身的构造 p{color : red}/*color 属性 red 值*//*p选择器 括号内内容 生命*/配合html <style>p{color : red}<\style>或者直接引入整个css文件 <head><style type text/css>import "1.3.css";<…

【vue组件之间的数据传递和组件的生命周期】一.组件之间的通信;二.组件的声明周期

目录 一.组件之间的通信 1.组件之间的关系&#xff1a;父子关系、兄弟关系、跨级关系 2.父子组件之间的通信&#xff08;数据传递&#xff09;&#xff1a; &#xff08;1&#xff09;父组件----》子组件&#xff1a;使用props &#xff08;2&#xff09;子组件----》父组件…

为什么互联网公司不欢迎中年人?

除开几个“越老越值钱”的岗位&#xff08;如医生、教师、建筑师&#xff09;外&#xff0c;大多数公司就是不欢迎中年人的。 你很难见到30岁的地推、40岁的销售、50岁的文员&#xff0c;但是20岁的年轻小伙一抓一大把&#xff0c;我们的互联网经济&#xff0c;就是建立在人口密…

RHEC——ansible配置yum源仓库

1.挂载本地光盘到/mnt 2.配置yum源仓库文件通过多种方式实现 1&#xff09;、仓库1 &#xff1a; Name: RH294_Base Description&#xff1a; RH294 base software Base urt: file:///mnt/BaseOS 不需要验证钦件包 GPG 签名 启用此软件仓库 2&#xff09;、仓库 2: Name: RH29…

立创eda专业版学习笔记(1)

之前那些博客对应的是立创eda标准版&#xff0c;版本号是6.5.4以前 最近开始使用专业版&#xff0c;原本以为专业版是标准版的基础上添加了些功能&#xff0c;现在才发现不是这么回事&#xff0c;专业版跟标准版在界面上的区别很大&#xff0c;几乎就是另外一个软件了&#xff…

外贸客户接待的基本环节有哪些?

外贸客户来了&#xff0c;接待人员一定要有耐心&#xff0c;那么怎么接待呢&#xff1f;以下是米贸搜为您整理的外贸客户接待流程。希望对你有帮助。外贸客户接待流程既然客人愿意来我们公司参观&#xff0c;他们一定有很大的诚意。但从这几年的案例来看&#xff0c;大部分来访…

JavaSE学习day1_01,计算机基础知识

学习正式开始&#xff1a; 学习之前先了解一些计算机基本常识&#xff1a; 1. CMD 1.1 什么是CMD&#xff1f; 先看一张图&#xff1a; 这是黑客大佬使用的命令。 这是现代计算机的图形化界面。学过操作系统的同学应该知道这是操作系统提供的一个接口&#xff0c;它严格意义…

ORB-SLAM2 --- KeyFrame::SetBadFlag函数

目录 1.函数作用 2.code 3.函数解析 1.函数作用 真正地执行删除关键帧的操作。 需要删除的是该关键帧和其他所有帧、地图点之间的连接关系。 2.code void KeyFrame::SetBadFlag() { // Step 1 首先处理一下删除不了的特殊情况{unique_lock<mutex> lock(mMutexConn…

visual studio控制台中文乱码问题

踩坑经历&#xff1a; 这是一个向文件中写入文字&#xff08;中文&#xff0c;在将文件中文字读取出来的代码。读取出来的结果是符号码。 这个问题在网上找了很多的解决办法&#xff0c;都没有完全解决。 其实要不出现乱码&#xff0c;就要保持控制台编码和源代码编码相一致就可…

照片恢复软件哪个好用?5个好用的照片恢复软件推荐

照片可以勾起回忆&#xff0c;让我们想起与最亲近的人一起度过的时光&#xff0c;这就是为什么仅仅丢失一张重要照片就会让人感觉完全毁灭性的——几乎就像你失去了记忆本身一样。好消息是&#xff0c;大多数丢失或意外删除的照片都可以使用照片恢复软件恢复&#xff0c;而且我…

XILLINX时钟约束相关说明

时钟说明 primary clock 基准时钟&#xff0c;primary这里有“基本的”更贴切&#xff0c;虽然其有“主要的、首要的、初级的、原发性的”意思。 提供的基准时钟有俩种情况&#xff1a; 时钟由外部时钟源提供&#xff0c;通过输入引脚进入FPGA&#xff1b;高速收发器(GT)的时…

Google编程规范

Google编程规范总结一、前言二、头文件三、类构造函数可拷贝类型和可移动类型struct和class接口存取控制和声明顺序四、来自Google的奇技所有权与智能指针cpplint五、其他C特性六、命名约定(重点)七、注释(重点)八、代码格式(重点)九、结束语一、前言 昨天听了雷军的演讲&#…

猪齿鱼知识沉淀

数据源知识沉淀 1、下拉框与Lov的注意点&#xff1a; 下拉框 {name: intertradeType,lookupCode: "HCMS.INTERTRADE_TYPE",label: intl.get(${prefix}.table.intertradeType).d(贸易性质),required: true, }, {name: intertradeTypeMeaning,label: intl.get(${pref…

2023 docker安装gitlab-ce

公司搭建私服git来管理代码。这里使用docker来安装gitlab&#xff0c;过程相对简单。需要服务器至少有4g内存。这里安装的gitlab-ce社区版。前提是安装了docker 安装gitlab-ce 下载镜像&#xff0c;等待下载… docker pull gitlab/gitlab-ce:latest建立了目录 /opt/docker/git…

基础知识一览

这里写目录标题1.类1.1 类和对象的关系1.2 构造函数1.2.1 概念1.2.1.1 修饰符1.2.1.2 返回值类型1.2.1.3 函数名1.2.1.4 参数列表1.2.1.5 return语句1.2.1.6 扩展2.继承2.1 继承的好处和限制2.2 子父类中定义了一模一样的成员变量1.类 1.1 类和对象的关系 类是对象的抽象,对象…