#C++ -STL容器之vector(浓缩版)#

vector容器是C++标准库中的一个动态数组容器。

它允许你在运行时动态地添加或删除元素。它提供了随机访问的能力,这意味着你可以像访问数组一样直接通过索引访问元素,同时又具有动态大小的优势。

vector的功能与C语言中的数组十分相似,但是功能更为强大。

vector和普通数组的区别:
1.数组是静态的,长度不可改变,而vector可以动态扩展,增加长度
2.数组内数据通常存储在栈上,而vector中数据存储在堆上

  1. 动态增长和缩小vector 可以自动调整大小,根据需要动态分配内存空间。
  2. 随机访问:可以通过索引快速访问 vector 中的元素。
  3. 在尾部插入和删除元素:可以在 vector 的尾部快速插入和删除元素。
  4. 迭代器支持:可以使用迭代器遍历 vector 中的元素。
  5. 元素访问:可以使用 at()[]front()back() 方法访问元素。
  6. 容量管理:可以使用 size()capacity()reserve() 等方法管理容量和大小。

1.assign()  vector容器的初始化--assign

#include <bits/stdc++.h>
using namespace std;
int main() {//初始化数组int arr[5] = {1, 2, 3, 4, 5};//初始化容器vector(两种方法)vector<int> vec1(arr, arr + 5);vector<int> vec2, vec3;vec2.assign(arr, arr + 5);return 0;
}

2.at().  vector容器的随机访问(括号内填入的是下标或者是索引)

//1 at
int a=vec1.at(1);
cout<<a<<endl;
int b=vec1[10];
int c=vec1.at(10);//使用at()访问出现越界会报错,而上面这种直接访问不会提示

3.insert()  

        (1).在固定位置插入一个元素
vec1.insert(vec1.begin(), 2);

假如原先vec1是1,3,5,7,9;

此时应该变成1,3,2,5,7,9;

        (2).在指定位置插入一系列相同数据:(批量插入)
vec1.insert(vec1.begin(), 2, 10);

假如原先是1,3,5,7,9

此时应该变成1,3,2,2,2,2,2,2,2,2,2,2,5,7,9;

        (3).在指定位置插入一系列数据:(下标位置2到4是左闭右开)
vec1.insert(vec1.begin(),vec2.begin()+2,vec2.begin()+4);

如果vec1是 1,3,5,7,9;

vec2是 2,4,6,8,10;

那么此时vec1应该变成 6,8,1,3,5,7,9;

4.size() vector容器大小

int b = vec1.size();
cout<<b<<endl;

如果vec1是 1,3,5,7,9

那就是输出5

5.pop_back() push_back() vector容器的扩建删除(尾增尾删)

vec1.pop_back();vec1.push_back(1000);

如果vec1是 1,3,5,7,9

此时就应该变成 1,3,5,7,1000

6.front() vector容器的首个元素:

vec1.front();
cout<<vec1.front()<<endl;

如果vec1是1,2,3,4,5;

此时应该返回1;

7.empty() vector容器判断大小是否为空(True or False)( 1 or 0)

bool a=vec1.empty();
cout<<a<<endl;cout<<vec1.empty()<<endl;

8resize() vector容器大小的重置化(新的大那就可以补固定数据,新的小那就删去多余的)

vec1.resize(10);

将a的现有元素个数调至10个,多则删,少则补,其值随机

这种情况没有指定数据

vec1.resize(10,2);

将a的现有元素个数调至10个,多则删,少则补,其值为2

这种情况指定了数据

9clear() 清空数据元素

vec1.clear();

它会删除 vector 中的所有元素,使得内部的迭代器指向的位置无效。

clear() 不会改变 vector 的容量,即使容器中没有元素,它仍然保持足够的空间以存储可能添加的元素。

size() 属性将变为0,表示容器中没有任何元素。

10.capacity() vector容器在分配新的存储空间之前能存储的元素总数。

vec1.capacity();
//cout<<vec1.capacity()<<endl;

capacity 可以帮助我们将 vector 容器开拓更大的空间。

11.reserve vector容器的最小容纳容纳数量

vec1.reserve(100);

将vec1的容量(capacity)扩充至100,也就是说现在测试vec1.capacity();的时候返回值是100.这

种操作。

但是,只有在需要给a添加大量数据的时候才 显得有意义,因为这将避免内存多次容量扩充操作

(当a的容量不足时电脑会自动扩容,当然这必然降低性能)

12.swap

vec1.swap(vec2);

两容器的内容被交换了。

但,这有什么用呢??答案是可以用来收缩内存空间。

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

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

相关文章

MyBatis-Plus 查询不到数据,但使用 SQL 可以查询到数据的问题排查

目录 前言 一、问题描述 示例代码 二、排查步骤 1. 检查数据源配置 2. 检查实体类与数据库表结构 3. 检查 Mapper 接口 4. 检查 MyBatis-Plus 配置 5. 排查查询条件 6. 检查日志输出 7. 检查数据库连接问题 8. 检查全局配置和插件 三、解决方案 前言 在开发过程中&…

百度Agent初体验(制作步骤+感想)

现在AI Agent很火&#xff0c;最近注册了一个百度Agent体验了一下&#xff0c;并做了个小实验&#xff0c;拿它和零一万物&#xff08;Yi Large&#xff09;和文心一言&#xff08;ERNIE-4.0-8K-latest&#xff09;阅读了相同的一篇网页资讯&#xff0c;输出资讯摘要&#xff0…

[职场] 线上面试的准备工作 #知识分享#经验分享#媒体

线上面试的准备工作 面对求职中的面试&#xff0c;应届毕业生该做些什么准备呢&#xff1f;在这里&#xff0c;向各位分享面试前做好预案不慌张几点准备。现在许多面试是通过线上形式进行的。对于求职者来说&#xff0c;要做好两手准备。在这里&#xff0c;重点与大家分享线上面…

解决vue3使用ref 获取不到子组件属性问题

需求&#xff1a; 父子组件使用<script setup>语法糖&#xff0c;父组件通过给子组件定义ref访问子组件内部属性或事件。 关键点&#xff1a; 子组件中&#xff0c;setup语法糖需要用defineExpose把要读取的属性和方法单独暴露出去&#xff0c;否则会访问失败&#xf…

el-dialog el-select适配移动端

一、el-dialog 2024.06.20今天我学习了如何对el-dialog弹窗适配移动端展示&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; media screen and (min-width: 220px) and (max-width: 600px) {::v-deep .el-dialog {width: 95% !important;} } 二、el-select 代码如下…

Gorm 实践:使用 gorm.ErrRecordNotFound 判断元组是否存在

Gorm 提供了很多错误类型给我们使用&#xff0c;今天我们介绍较为常见的 gorm.ErrRecordNotFound&#xff0c;我们将用其实现较为常见的存在性判断逻辑。之所以常见&#xff0c;是因为我们常需要使用存在性判断&#xff0c;来避免使用不存在的结果的结果集或重复插入数据行。 …

盘立方期货Kdj幅图指标公式源码

盘立方期货Kdj幅图指标公式源码&#xff1a; N:250; WR1:100-100*(HHV(HIGH,N)-CLOSE)/(HHV(HIGH,N)-LLV(LOW,N)),DOT,COLORLIGHTGREEN; EW:EMA(WR1,5); STICKLINE(WR1<20,WR1,20,1,0),COLORYELLOW; STICKLINE(WR1>80,WR1,80,1,0),COLORYELLOW; RSV:(CLOSE-LLV(LOW…

IDEA中如何使用Git及其在实际工作中如何进行开发(入职版,详细大量图演示)

1.你把代码拉一下 新入职一般都是拉取公司的代码&#xff0c;一般都是领导给你一个项目的git地址 一般是gitee(Gitee - 基于 Git 的代码托管和研发协作平台) 或者是云效(阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台) https://gitee.com/xxx/xxx.git /…

事务的开启方式

1、声明式事务&#xff1a;Transactional 2、编程式开启&#xff1a; 建立数据库连接关闭自动提交&#xff0c;开启事务执行sql提交事务/回滚事务关闭连接 Connection conn null; 2 3try { 4 // 建立数据库连接 5 conn DriverManager.getConnection(DB_URL, USER, P…

Linux 字符型设备 + platform总线 + sysfs设备模型

1 概述 第一部分先简单介绍下字符型设备 platform总线 sysfs设备模型的关系。 1.1 . 字符设备驱动 Linux设备驱动分三种&#xff0c;包括字符设备驱动、块设备驱动和网络设备驱动。字符设备只能按字节流先后顺序访问设备内存&#xff0c;不能随机访问。鼠标、触摸屏、LCD等…

Crypto++ 入门

一、简介 Crypto&#xff08;也称为CryptoPP、libcrypto或cryptlib&#xff09;是一个免费的开源C库&#xff0c;提供了多种加密方案。它由Wei Dai开发和维护&#xff0c;广泛应用于需要强大加密安全的各种应用程序中。该库提供了广泛的加密算法和协议的实现&#xff0c;包括&…

Spring循环依赖问题——从源码画流程图

文章目录 关键代码相关知识为什么要使用二级缓存为什么要使用三级缓存只使用两个缓存的问题不能解决构造器循环依赖为什么多例bean不能解决循环依赖问题初始化后代理对象赋值给原始对象解决循环依赖SpringBoot开启循环依赖 循环依赖 在线流程图 关键代码 从缓存中查询getSingl…

【贪心算法初级训练】在花坛上是否能种下n朵花、碰撞后剩余的行星

1、在花坛上是否能种下n多花 一个很长的花坛&#xff0c;一部分地已经种植了花&#xff0c;另一部分却没有&#xff0c;花不能种植在相邻的地块上否则它们会争夺水源&#xff0c;两者都会死去。给你一个整数数组表示花坛&#xff0c;由若干个0和1组成&#xff0c;0表示没种植花…

51单片机STC89C52RC——7.1 串口通信

目的/效果 实现单片机串口与电脑串口工具进行数据通讯&#xff0c; 1&#xff1a;设备向电脑串口发送HEX 2&#xff1a;让电脑串口工具控制单片机LED亮灭。同时让单片机反馈控制的结果。 一&#xff0c;STC单片机模块 二&#xff0c;串口通讯 2.1 串行通信与并行通信 &…

axios全局封装AbortController取消重复请求

为什么&#xff1f; 问题&#xff1a;为什么axios要配置AbortController&#xff1f;防抖节流不行吗&#xff1f; 分析&#xff1a; 防抖节流本质上是用延时器来操作请求的。防抖是判断延时器是否存在&#xff0c;如果存在&#xff0c;清除延时器&#xff0c;重新开启一个延…

win10改远程桌面端口,Windows 10 修改远程桌面端口号的专业指南

在Windows 10系统中&#xff0c;远程桌面&#xff08;Remote Desktop&#xff09;功能允许用户从一台计算机远程访问和控制另一台计算机。为了增加远程连接的安全性&#xff0c;减少潜在的安全风险&#xff0c;修改默认的远程桌面端口号是一个常见的安全措施。以下是在Windows …

k8s学习--YAML资源清单文件托管服务nginx

文章目录 前言应用环境具体实现步骤1.安装源码nginx及相关模块2.修改nginx配置文件3.启动验证4.测试 总结 前言 nginx 是一个开源的高性能 HTTP 和反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。在容器和 Kubernetes 的背景下&#xff0c;nginx 经常被用作静…

决策树算法原理

目录 一&#xff1a;介绍 二&#xff1a;算法原理 1.熵和信息熵 2.信息增益 三决策树分裂指标 1.信息熵分裂&#xff1a; 2.Gini系数&#xff08;CART&#xff09; 3.信息增益率 一&#xff1a;介绍 决策树( Decision Tree) 又称为判定树&#xff0c;是数据挖掘技术中的…

你如何看待市场波动性的?

实际上&#xff0c;波动性并不总是负面的&#xff0c;它有时也孕育着快速获利的机会。 对于长期投资者而言&#xff0c;市场波动&#xff08;尤其与熊市相伴时&#xff09;往往是一个优势。它允许投资者拓展并多样化投资组合&#xff0c;以较低的价格购入投资工具&#xff0c;…

【嵌入式Linux】<总览> 多进程(更新中)

文章目录 前言 一、进程的概念与结构 1. 相关概念 2. 内核区中的进程结构 3. 进程的状态 4. 获取进程ID函数 二、进程创建 1. fork和vfork函数 2. 额外注意点 3. 构建进程链 4.构建进程扇 三、进程终止 1. C程序的启动过程 2. 进程终止方式 四、特殊的进程 1. 僵…