蓝桥杯简单STL

news2024/11/28 20:50:01

目录

vector

vector定义

vector访问

常用函数

size()

​编辑

push_back(num)

pop_back()

clear

迭代器(iterator)

迭代器定义

遍历数组示例

insert(it, element)  

erase(it)


标准模板库--STL,它包含了多种预定义的容器、算法和迭代器,极大地简化了编程工作。简单的说就是有了一些可以直接用的函数。

vector

vector是C++标准模板库(STL)中提供的一种模板类,它代表了一个可以动态调整大小的数组,
在编程中,我们通常称之为“变长数组”,意味着其长度可以根据需要自动增长或缩小。

变长数组,在C语言中定义数组的时候int arr[100],中括号里面的必须是一个常量,当我们不知道数组的大小的时候,用C语言就不是很方便。

在使用vector加一个头文件就可以———#include<vector>

vector定义

vector的定义语法

vector<typename> name;这个只是定义了一个数组,长度未知,数组中的数字默认为0

vector<typename> name(n);这个数组长度为n,数组中数字为0

vector<typename> name(n,num);这个数组长度为n,数组中每个数字为num

vcctor的使用示例:
定义一个整数类型的vector——vector<int>name;

定义一个双精度浮点数类型的vector——vcctor<double>name;

定义一个字符类型的vector——vector<char>name;

定义一个结构体类型的vector——vector<node>name;(其中node是已定义的结构体类型)

#include<iostream>
#include<vector> 
using namespace std;
int main()
{
	int n;
	cin>>n;
	vector <int>arr(n);
	for(int i=0;i<arr.size();i++)cout<<arr[i]<<' ';
	return 0;
 } 

vector访问

vector访问可以像C语言那样用下标访问——arr[i];

常用函数

push_back(element)——向vector的末尾添加一个新元素。

pop_back()——删除vector中的最后一个元素。

size()——返回vector中元素的个数

clear()——删除vector中的所有元素,使其变为空。

insert(it, element)——在指定的迭代器位置插入一个新元素。

erase(it)——删除指定迭代器位置的元素。

size()

输出数组的元素个数

 #include<iostream>
#include<vector> 
using namespace std;
int main()
{
	int n;
	cin>>n;
	vector <int>arr;
	for(int i=0;i<n;i++)arr.push_back(i);
	cout<<"元素个数:"<<arr.size()<<endl; 
	return 0;
 } 

push_back(num)

直接在末尾加如num这个数字

#include<iostream>
#include<vector> 
using namespace std;
int main()
{
	int n;
	cin>>n;
	vector <int>arr;
	for(int i=0;i<n;i++)arr.push_back(i);
	cout<<"元素个数:"<<arr.size()<<endl; 
	cout<<"输出元素:"; 
	for(int i=0;i<arr.size();i++)cout<<arr[i]<<' ';
	return 0;
 } 

pop_back()

作用是删除最后的元素

 #include<iostream>
#include<vector> 
using namespace std;
int main()
{
	int n;
	cin>>n;
	vector <int>arr;
	for(int i=0;i<n;i++)arr.push_back(i);
	cout<<"元素个数:"<<arr.size()<<endl; 
	cout<<"输出元素:"; 
	for(int i=0;i<arr.size();i++)cout<<arr[i]<<' ';
	 
	
	arr.pop_back();
	cout<<endl<<"pop_back()一次之后"<<endl;  
	cout<<"元素个数:"<<arr.size()<<endl;
	cout<<"输出元素:"; 
	for(int i=0;i<arr.size();i++)cout<<arr[i]<<' ';
	return 0;
 } 

clear

#include<iostream>
#include<vector> 
using namespace std;
int main()
{
	int n;
	cin>>n;
	vector <int>arr;
	for(int i=0;i<n;i++)arr.push_back(i);
	cout<<"元素个数:"<<arr.size()<<endl; 
	cout<<"输出元素:"; 
	for(int i=0;i<arr.size();i++)cout<<arr[i]<<' ';
	 
	
	arr.clear();
	cout<<endl<<"clear()"<<endl;  
	cout<<"元素个数:"<<arr.size()<<endl;
	cout<<"输出元素:"; 
	for(int i=0;i<arr.size();i++)cout<<arr[i]<<' ';
	return 0;
 } 

在介绍后两个函数之前先来了解一下迭代器

迭代器(iterator)

迭代器,我之前的理解就是循环,其实不是的,专业点来说迭代器是一个变量,指向容器(例如数组-vector,字符串-string)的元素的一个变量,“指向”是不是有些耳熟,从这看,迭代器和指针类似

这里我们就介绍一下正向迭代器

迭代器定义

容器类名::iterator 迭代器名;

例如:vector<int>::iterator p

此时p就相当于就相当于指针,我们可以给p进行指向;

遍历数组示例

begin()是获得数组开始的元素

end()是获得数组结尾的那个元素

 #include<iostream>
 #include<vector>
 using namespace std;
 int main()
 {
 	int n;
	cin>>n;
	vector <int>arr;
	for(int i=0;i<n;i++)arr.push_back(i);
	//定义迭代器 
	vector<int>::iterator p=arr.begin();
	for(int i=0;i<arr.size();i++)
	{
		cout<<*(p+i)<<' ';
	}
 	return 0;
 }

insert(it, element)  

insert(it, element)——在指定的迭代器位置插入一个新元素 (其中it是迭代器的所指的位置,element是要插入的元素)

假设:我们想在数组的第4个未知插入10;

begin()是获得第一个元素,后面加上数字几,就往后移动几个元素

 #include<iostream>
 #include<vector>
 using namespace std;
 int main()
 {
 	int n;
	cin>>n;
	vector <int>arr;
	for(int i=0;i<n;i++)arr.push_back(i);
	//定义迭代器 
	vector<int>::iterator p=arr.begin();
	cout<<"插入前"<<endl;
	cout<<"数组元素个数:"<<arr.size()<<endl; 
	cout<<"数组元素:";
	for(int i=0;i<arr.size();i++)	cout<<*(p+i)<<' ';
	
	//定义一个迭代器
	vector<int>::iterator p3=arr.begin()+3;
	arr.insert(p3,10); 
	
	cout<<endl<<"插入后"<<endl;
	cout<<"数组元素个数:"<<arr.size()<<endl; 
	cout<<"数组元素:";
	for(int i=0;i<arr.size();i++)	cout<<*(p+i)<<' ';
 	return 0;
 }

erase(it)

erase(it)——删除指定迭代器位置的元素。

假设要删除第5个位置的元素

 #include<iostream>
 #include<vector>
 using namespace std;
 int main()
 {
 	int n;
	cin>>n;
	vector <int>arr;
	for(int i=0;i<n;i++)arr.push_back(i);
	//定义迭代器 
	vector<int>::iterator p=arr.begin();
	cout<<"删除前"<<endl;
	cout<<"数组元素个数:"<<arr.size()<<endl; 
	cout<<"数组元素:";
	for(int i=0;i<arr.size();i++)	cout<<*(p+i)<<' ';
	
	//定义一个迭代器
	vector<int>::iterator p3=arr.begin()+4;
	arr.erase(p3); 
	
	cout<<endl<<"删除后"<<endl;
	cout<<"数组元素个数:"<<arr.size()<<endl; 
	cout<<"数组元素:";
	for(int i=0;i<arr.size();i++)	cout<<*(p+i)<<' ';
 	return 0;
 }

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

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

相关文章

算法——倍增

. - 力扣&#xff08;LeetCode&#xff09; 给你一棵树&#xff0c;树上有 n 个节点&#xff0c;按从 0 到 n-1 编号。树以父节点数组的形式给出&#xff0c;其中 parent[i] 是节点 i 的父节点。树的根节点是编号为 0 的节点。 树节点的第 k 个祖先节点是从该节点到根节点路径…

SQL注入sqli_libs靶场第一题

第一题 联合查询 1&#xff09;思路&#xff1a; 有回显值 1.判断有无注入点 2.猜解列名数量 3.判断回显点 4.利用注入点进行信息收集 爆用户权限&#xff0c;爆库&#xff0c;爆版本号 爆表&#xff0c;爆列&#xff0c;爆账号密码 2&#xff09;解题过程&#xff1…

【前端捉鬼记】使用nvm切换node版本后再用node -v查看仍然是原来的版本

今天遇到一个诡异的问题&#xff0c;使用nvm切换node版本&#xff0c;明明提示已经切换成功&#xff0c;可是再次查看node版本还是之前的&#xff01; 尝试了很多办法&#xff0c;比如重新打开一个cmd窗口、切换前执行nvm install version都没成功&#xff0c;直到找到这篇文章…

# ABAP SQL 字符串处理

经常我都要在ABAP的sql语句中对字符串进行处理&#xff0c;现在就总结一下可以用到的方法 文章目录 字符串处理拼接字段运行结果 填充字符串运行结果 截取字符串 SUBSTRING运行结果 CAST转换类型程序运行结果 字符串处理 在SQL语句中&#xff0c;有时候会有需要拼接字段或者是…

Java 集合Collection

集合的体系 Collection的结构体系 List系列集合&#xff1a;添加的元素是有序的、可重复、有索引。Set系列集合&#xff1a;无序、不重复、无索引 HashSet&#xff1a;无序、不重复、无索引LinkedHashSet:有序、不重复、无索引TreeSet&#xff1a;按照大小默认升序排序、不重复…

ES6基础(JavaScript基础)

本文用于检验学习效果&#xff0c;忘记知识就去文末的链接复习 1. ECMAScript介绍 ECMAScript是一种由Ecma国际&#xff08;前身为欧洲计算机制造商协会&#xff0c;英文名称是European Computer Manufacturers Association&#xff09;通过ECMA-262标准化的脚本程序设计语言…

SRNIC、选择性重传、伸缩性、连接扩展性、RoCEv2优化(六)

参考论文SRDMA&#xff08;A Scalable Architecture for RDMA NICs &#xff09;&#xff1a;https://download.csdn.net/download/zz2633105/89101822 借此&#xff0c;对论文内容总结、加以思考和额外猜想&#xff0c;如有侵权&#xff0c;请联系删除。 如有描述不当之处&…

Python中大的一把锁

今天可以来讲解下GIL是个什么了。 GIL为什么是Python中大的一把锁&#xff1f; GIL是Global Interpreter Lock的缩写&#xff0c;翻译过来就是全局解释器锁。 从字面上去理解&#xff0c;它就是锁在解释器头上的一把锁&#xff0c;它使Python代码运行变得有序。 假如有一段…

vue2 使用vue-org-tree demo

1.安装 npm i vue2-org-tree npm install -D less-loader less安装 less-loader出错解决办法&#xff0c;直接在package.json》devDependencies下面加入less和less-loader版本&#xff0c;然后执行npm i &#xff0c;我用的nodejs版本是 16.18.0&#xff0c;“webpack”: “^4…

上位机图像处理和嵌入式模块部署(qmacvisual缺失的颜色检测)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在图像处理当中&#xff0c;对颜色的处理是非常重要的。当然&#xff0c;这要建立在拍摄图片是彩色图片的基础之上。工业上面&#xff0c;虽然是黑…

wsl初步使用记录

wsl介绍 WSL是windows平台下Linux环境的子系统&#xff08;Windows Subsyetem for Linux&#xff09;&#xff0c;可以让Windows下方便的安装Linux系统&#xff0c;而无需安装其他虚拟机软件。 wsl使用 Windows操作系统支持 Windows 10 版本 2004 及更高版本&#xff08;内…

ruoyi-nbcio-plus基于vue3的flowable的自定义业务单表例子的升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

Vant DropdownMenu 下拉菜单带搜索功能

Vant DropdownMenu 下拉菜单带搜索功能 效果图&#xff1a; 上代码&#xff1a; <van-dropdown-menu active-color"#E33737"><van-dropdown-item ref"dropdownItem"><template #title><span>{{ dropdownItem.text }}</span…

【数据结构】:顺序表专题

前言&#xff1a;今天我们开始介绍数据结构有关内容&#xff0c;那么数据结构是什么呢&#xff1f; 数据结构是计算机存储、组织数据的方式。在工作中&#xff0c;我们通常会直接使用已经封装好的集合API(应用程序编程接口)&#xff0c;这样可以更高效地完成任务。但是作为一名…

三角形最小路径和-java

题目描述: 给定一个三角形 triangle &#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说&#xff0c;如果正位于当前行的下标 i &#xff…

JavaScript教程:从基础到发展历程及语法规则的全面介绍

文章目录 一、JavaScript简介二、JavaScript发展历程三、JavaScript基础语法3.1、变量概念3.2、变量命名3.3、变量提升3.4、代码注释3.5、语句3.6、区块 四、总结 一、JavaScript简介 JavaScript 是一种高级的、解释型的编程语言&#xff0c;主要用于为网页添加交互性和动态效…

网络安全(防火墙,IDS,IPS概述)

问题一:什么是防火墙,IDS,IPS? 防火墙是对IP:port的访问进行限制,对访问端口进行制定的策略去允许开放的访问,将不放开的端口进行拒绝访问,从而达到充当防DDOS的设备。主要是拒绝网络流量,阻断所有不希望出现的流程,禁止数据流量流通,达到安全防护的作用。如将一些恶…

谷歌浏览器快捷键, VScode 快捷键

谷歌浏览器快捷键 谷歌浏览器跳转标签页的方式&#xff1a; control Tab 跳转下一个标签页 control shift tab 上一个标签页 command 1-8 跳转对应的标签页&#xff0c;而command 9 则是跳转最后一个标签页 Previous Tab 插件实现谷歌浏览器两个tab页来回切换。快捷键为…

JVM-结合MAT工具分析OOM问题

JVM-结合MAT工具分析OOM问题 启动项目前配置VM参数 -XX:UseParNewGC -XX:UseConcMarkSweepGC -Xms1m #初始化大小 -Xmx1m #最大值 -XX:PrintGCDetails -Xloggc:gc_dandan.log -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath./运行结果截图 使用MAT打开java_pid12164.hprof…

实时时钟模块RX8901CE具有数字温度补偿功能,助力工业设备实现精准控制

在工业控制领域&#xff0c;电子产品的工作温度范围较广&#xff0c;同样的产品将面对高温、低温等不同工况。对于时钟信号敏感的电路设计而言&#xff0c;温度变化将严重影响产品功能&#xff0c;因此需要高精度时钟来保证电路信号的稳定&#xff0c;这种情况下需要使用带数字…