第一百二十三天学习记录:C++提高:STL-vector容器(下)(黑马教学视频)
vector插入和删除
功能描述:
对vector容器进行插入、删除操作
函数原型:
push_back(ele); //尾部插入元素ele
pop_back(); //删除最后一个元素
insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele
insert(const_iterator pos, int count ,ele); //迭代器指向位置pos插入count个元素ele
erase(const_iterator pos); //删除迭代器指向的元素
erase(const_iterator start, const_iterator end); //删除迭代器从start到end之间的元素
clear(); //删除容器中所有元素
#include<iostream>
using namespace std;
#include<vector>//vector插入和删除
/*
push_back(ele); //尾部插入元素ele
pop_back(); //删除最后一个元素
insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele
insert(const_iterator pos, int count ,ele); //迭代器指向位置pos插入count个元素ele
erase(const_iterator pos); //删除迭代器指向的元素
erase(const_iterator start, const_iterator end); //删除迭代器从start到end之间的元素
clear(); //删除容器中所有元素
*/void printVector(vector<int>& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}void test01()
{vector<int>v1;//尾插v1.push_back(10);v1.push_back(40);v1.push_back(30);v1.push_back(50);v1.push_back(20);//遍历printVector(v1);//尾删v1.pop_back();printVector(v1);//插入 第一个参数是迭代器v1.insert(v1.begin(), 100);printVector(v1);v1.insert(v1.begin(), 2, 333);printVector(v1);//删除v1.erase(v1.begin());printVector(v1);//清空//v1.erase(v1.begin(),v1.end());v1.clear();printVector(v1);
}int main()
{test01();return 0;
}

总结:
尾插 push_back
尾删 pop_back
插入 insert(位置迭代器)
删除 erase(位置迭代器)
清空 clear
vector数据存取
功能描述:
对vector中的数据的存取操作
函数原型:
at(int idx); //返回索引idx所指的数据
operator[]; //返回索引idx所指的数据
front(); //返回容器中第一个数据元素
back(); //返回容器中最后一个数据元素
#include<iostream>
using namespace std;
#include<vector>//vector容器 数据存取void printVector(vector<int>& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}void test01()
{vector<int>v1;for (int i = 0; i < 10; ++i){v1.push_back(i);}//利用[]方式访问数组中元素for (int i = 0; i < v1.size(); ++i){cout << v1[i] << " ";}cout << endl;//利用at方式访问元素for (int i = 0; i < v1.size(); ++i){cout << v1.at(i) << " ";}cout << endl;//获取第一个元素cout << "第一个元素为:" << v1.front() << endl;//获取最后一个元素cout << "最后一个元素为:" << v1.back() << endl;
}int main()
{test01();return 0;
}

总结:
除了用迭代器获取vector容器中元素,[]和at也可以
front返回容器第一个元素
back返回容器最后一个元素
vector互换容器
功能描述:
实现两个容器内元素进行互换
函数原型:
swap(vec); //将vec与本身的元素互换

#include<iostream>
using namespace std;
#include<vector>//vector容器互换void printVector(vector<int>& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}//1、基本使用void test01()
{vector<int>v1;for (int i = 0; i < 10; ++i){v1.push_back(i);}cout << "交换前:" << endl;printVector(v1);vector<int>v2;for (int i = 10; i > 0; --i){v2.push_back(i);}printVector(v2);cout << "交换后:" << endl;v1.swap(v2);printVector(v1);printVector(v2);
}//2、实际用途
//巧用swap可以收缩内存空间
void test02()
{vector<int>v;for (int i = 0; i < 100000; i++){v.push_back(i);}cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;v.resize(3); //重新指定大小cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;//巧用swap收缩内存vector<int>(v).swap(v);cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;}int main()
{test01();test02();return 0;
}

总结:swap可以使两个容器互换,可以达到实用的收缩内存效果
vector预留空间
功能描述:
减少vector在动态扩展容量时的扩展次数
函数原型:
reserve(int len); // 容器预留len个元素长度,预留位置不初始化,元素不可访问
#include<iostream>
using namespace std;
#include<vector>//vector容器 预留空间void printVector(vector<int>& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}void test01()
{vector<int>v;//int num = 0;//统计开辟次数//int* p = NULL;//for (int i = 0; i < 100000; ++i)//{// v.push_back(i);// if (p != &v[0])// {// p = &v[0];// num++;// }//}//cout << "num = " << num << endl;//30//利用reserve预留空间v.reserve(100000);int num = 0;//统计开辟次数int* p = NULL;for (int i = 0; i < 100000; ++i){v.push_back(i);if (p != &v[0]){p = &v[0];num++;}}cout << "num = " << num << endl;//1
}int main()
{test01();return 0;
}
总结:如果数据量较大,可以一开始利用reserve预留空间
相关文章:
第一百二十三天学习记录:C++提高:STL-vector容器(下)(黑马教学视频)
vector插入和删除 功能描述: 对vector容器进行插入、删除操作 函数原型: push_back(ele); //尾部插入元素ele pop_back(); //删除最后一个元素 insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele insert(const_iterator pos, int cou…...
谈谈Spring与字节码生成技术
Spring框架是一个面向企业级Java应用开发的开源框架,它提供了许多功能和特性来简化Java开发过程。字节码生成技术在Spring框架中起着重要的作用,用于实现依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriente…...
Java数组详解 -- 基础知识与常用操作
文章目录 前言一、初识数组1. 数组的定义2. 数组的特点3. 声明和初始化数组4. 默认初始化值 二、访问和操作数组元素1. 数组的索引和范围2. 通过索引访问数组元素3. 修改数组元素的值 三、数组的长度和属性1. 数组的长度计算2. 数组的长度属性3. 数组越界的错误 四、数组的遍历…...
(统计学习方法|李航)第五章 决策树——一二三节:决策树模型与学习,特征选择,决策树的生成,
目录 一,决策树模型与学习 1.决策数模型 2.决策树与if-then规则 3.决策树与条件概率分布 4.决策树学习 二,特征选择 1.特征选择问题 2.信息增益 3.信息增益比 三,决策树的生成 1.ID3算法 2.C4.5的生成算法 一,决策树模型…...
qt lamda表达式及捕获变量列表符号说明及示例
问题描述: 最近发现很多人都喜欢用Lamda表达式了,至于他们到底知不知道自己用的是什么意思,那就另说了。 虽然我个人并不太喜欢,因为很多地方没法像以前信号和槽那样清晰了,而且很多生成UML的软件估计也不支持解析转成对应的序列图啥的。 但是这个lamda写法确实挺方便的…...
第十六章、【Linux】程序管理与SELinux初探
16.1 什么是程序 (process) 在Linux 系统当中:“触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系ÿ…...
ElasticSearch索引生命周期管理--DELETE
概要 ElasticSearch中的索引生命周期管理,也就是ilm(Manage the index lifecycle),是指定了索引在不同周期下的处理策略。ilm 的对象是索引而不是索引中的数据。ilm 包括四个阶段:hot 、warm、cold和delete。hot、warm和cold表示…...
sentinel简单使用
核心demo: 1 引入依赖: <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.0</version> </dependency>2 核心代码: 3 限流保护代码:…...
C#小轮子:自动连续Ping网络地址
文章目录 前言Ping代码异步问题 前言 工作中,我们经常用到Ping这个指令,有时候我们需要Ping整个网段来查看这个网段上面有什么设备,哪些Ip地址是通的,这个时候就需要Ping指令 Ping 代码 我这个是批量Ping的代码,而…...
react入门笔记
什么是React? React是一个用于创建用户界面的开源前端javaScript库。它是声明式的、高效的和灵活的,并且他坚持基于组件的方法,这使得我们能够创建可重用的UI组件。 React是一个开源的前端javaScript库,用于构建用户界面或者UI组件。它是由…...
记录--前端重新部署如何通知用户
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 场景 前端构建完上线,用户还停留还在老页面,用户不知道网页重新部署了,跳转页面的时候有时候js连接hash变了导致报错跳不过去,并且用户体验不到新功能…...
WPS的excel表格单元格拖动数字日期等 不自增原因
对着表格中的每个单元格右下角,在变成下图,黑十字后,拖动这个十字.就会在右侧出现一个小窗口. 里面菜单中可以选择按序数增加 但是,如果拖动,发现小窗口菜单不出现.说明这一栏开启了筛选功能.清空筛选条件后,即可恢复自增功能....
2308C++简单异步懒
Lazy Lazy由C20无栈协程实现.一个Lazy闭包一个懒求值的计算任务. 使用Lazy 想用Lazy,需要先#inlude<async_simple/coro/Lazy.h>,再实现返回类型为Lazy<T>的协程函数即可.如: # 包含<简单异步/协程/懒.h>懒<整>任务1(整 x){协中 x;//带有协中的函数…...
Linux常规操作命令
日升时奋斗,日落时自省 目录 1、vim 1.1、工作模式 1.2、末行模式操作相关命令 1.2.1、保存退出操作 1.2.2、查找替换 1.3、输入模式操作相关命令 1.3.1、移动相关命令 1.3.2、删除和剪切命令 1.3.3、复制操作 1.3.4、撤销 2、head 3、tail 4、ps 5、…...
日期切换
组件:<template><div class"time-picker"><el-radio-group size"small" v-model"timeType" change"changePickerType"><el-radio-button label"hour" v-if"isShow">时</el…...
怎么裁剪视频大小尺寸?简单的裁剪方法分享
怎么裁剪视频的画面大小尺寸呢?有时当我们下载下来一段视频,由于视频的画面大小比例不同,会有很多的黑边,我们不管是观看还是进行二次编辑都非常影响体验,而调整视频画面比例以适应观众的设备或平台,比如将…...
智慧工地源码,Spring Cloud+ Vue+UniApp开发,微服务架构
智慧工地源码,智慧工地云平台源码 智慧工地APP源码 智慧工地的核心是数字化,它通过传感器、监控设备、智能终端等技术手段,实现对工地各个环节的实时数据采集和传输,如环境温度、湿度、噪音等数据信息,将数据汇集到云…...
【Hystrix技术指南】(5)Command创建和执行实现
创建流程 构建HystrixCommand或者HystrixObservableCommand对象 *使用Hystrix的第一步是创建一个HystrixCommand或者HystrixObservableCommand对象来表示你需要发给依赖服务的请求。 若只期望依赖服务每次返回单一的回应,按如下方式构造一个HystrixCommand即可&a…...
学习笔记-JAVAJVM-JVM的基本结构及概念
申明:文章内容是本人学习极客时间课程所写,文字和图片基本来源于课程资料,在某些地方会插入一点自己的理解,未用于商业用途,侵删。 原资料地址:课程资料 什么是JVM 原文连接: 原文连接 JVM是J…...
ubuntu20.04 docker 下编译 tensorflow-gpu
ubuntu20.04 安装tensorflow-gpu 配置: 系统 ubuntu 20.04 LTS 显卡 GTX 1060 6G 1 安装cudatoolkit (我选 CUDA Toolkit 12.2 ) NVIDIA CUDA Installation Guide for Linux https://docs.nvidia.com/cuda/cuda-installation-guide-linux/in…...
别再死记硬背了!用Python代码和Excel表格,手把手带你算清VGG16的参数量和FLOPs
用Python和Excel拆解VGG16:参数量与FLOPs的实战计算指南 当你第一次看到VGG16的1.38亿参数量时,是否好奇这个数字从何而来?作为计算机视觉领域的里程碑模型,VGG16的精妙之处不仅在于它的深度,更在于其规整的结构设计。…...
数据结构基础------初识二叉树
数据结构-------二叉树 1.树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。我们把它叫做树是因为它看起来像一颗倒挂的树,也就是根朝上,叶在下。 特点: 1.有一个特殊的结点,称为根结…...
别再死磕欧拉角了!用MATLAB的quaternion函数搞定机器人/无人机姿态解算(附完整代码)
四元数实战指南:用MATLAB彻底解决机器人姿态解算难题 刚接手无人机飞控项目时,我被欧拉角的万向节死锁问题折磨得焦头烂额——明明理论计算没问题,实际飞行时却总出现诡异的姿态跳变。直到改用四元数方案,这些问题才迎刃而解。本文…...
real-anime-z多场景落地:同人创作、轻小说配图、社交平台头像批量生成
real-anime-z多场景落地:同人创作、轻小说配图、社交平台头像批量生成 1. 平台介绍与核心价值 real-anime-z是一款专为二次元内容创作设计的文生图工具,基于Tongyi-MAI/Z-Image基础模型和Devilworld/real-anime-z风格模型构建。这个开箱即用的解决方案让…...
MindSearch:基于思维链的迭代式RAG系统,让大模型拥有深度推理能力
1. 项目概述:当大模型遇上“记忆宫殿”最近在折腾一个挺有意思的项目,叫“MindSearch”。这个名字听起来有点玄乎,但它的核心思路其实非常直接:给大语言模型(LLM)装上一个“外置大脑”,或者说&a…...
别再只盯着代码了!从支付宝/美团被二次打包,聊聊Android应用加固的实战选择与配置
从支付宝/美团被二次打包事件,拆解Android加固方案的技术选型与落地实践 当美团外卖的"李鬼"版本在第三方应用市场悄然流通,当支付宝的仿冒应用通过短信链接传播,这些真实案例揭示了一个残酷事实:二次打包已从边缘攻击…...
RTL8852BE无线网卡驱动:Linux下的终极配置与性能优化指南
RTL8852BE无线网卡驱动:Linux下的终极配置与性能优化指南 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 你是否正在为RTL8852BE无线网卡在Linux系统下的驱动安装和性能优化而…...
GD32F470内存布局详解:为什么你的SRAM只有448KB,以及如何用RT-Thread的memheap管理那64KB TCMSRAM
GD32F470内存架构深度解析:从芯片设计到RT-Thread实战优化 1. 揭开GD32F470内存布局的神秘面纱 第一次拿到GD32F470开发板时,我像大多数从STM32转过来的工程师一样,习惯性地在链接脚本里填上了512KB的RAM配置。结果编译通过的程序运行时却频繁…...
ARM开发板硬件接口与寄存器配置实战指南
1. ARM开发板硬件接口详解Integrator/IM-PD1开发板作为经典的ARM评估平台,其接口布局体现了嵌入式系统的典型设计思路。板载的PrimeCell系列外设控制器采用AMBA总线架构,通过标准化的寄存器接口与ARM内核交互。我们先从物理连接层开始剖析:1.…...
Orbitrap质谱20余年如1梦
摘要 本文综述了Orbitrap质谱作为主流高分辨准确质量(HR/AM) 技术问世的20年发展历程。文章梳理了Orbitrap分析器的研发历史、主流仪器系列的演进脉络,以及推动其广泛应用的关键技术创新;重点阐述混合与3合࿱…...
