05.STLvector、list、stack、queue

STL标准模板库

standard template library

STL将原来常用的容器和操作进行封装,增加了C++的编码效率

容器

string #include

vector #include

list #include

stack #include

queue #include

set #include

map #include

迭代器

容器和算法之间的粘合剂,可以类比指针

算法

sort()

max_element()

min_element()

vector容器

1.vector数组基本操作

向量数组(动态数组)

底层是静态数组

没有给向量数组分配空间不能向里面输入值

下面代码错误,因为向量数组v还没有分配空间
会造成非法访问内存空间的段错误
void text1_01(){int n;cin>>n;vector<int> v;for(int i=0;i<=n;i++){cin>>v[i];//错误,因为向量数组v还没有分配空间//会造成非法访问内存空间的段错误}for(int i=0;i<=n;i++){cout<<v[i]<<" ";}
}

v.push_back()和v.pop_back()

v.push_back()方法是分配空间的同时插入数据
v.pop_back()方法删除数据后,它的size大小也跟着改变
#pragma once
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;void text1_01(){int n;cin>>n;vector<int> v;cout<<"大小:"<<v.size()<<endl;for(int i=0;i<n;i++){int x;cin>>x;v.push_back(x);//不但插入数据,而且还分配空间}for(int i=0;i<v.size();i++){cout<<v[i]<<" ";}cout<<endl;v.pop_back();cout<<"大小:"<<v.size()<<endl;for(int i=0;i<v.size();i++){cout<<v[i]<<" ";}
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.调用vector类的的构造函数,给动态数组分配空间

方法一:缺省参2,分配n个整形空间,默认初始化为0

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void text1_01(){int n;cin>>n;vector<int> v(n+1);//分配n个int大小的空间,并且初始化为0for(int i=1;i<=n;i++){cout<<v[i]<<" ";}cout<<endl;
}

方法二:参二为val,分配n个整形空间,则全部初始化为val

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void text1_01(){int n;cin>>n;vector<int> v(n+1,100);//分配n个int大小的空间,并且初始化为valfor(int i=1;i<=n;i++){cout<<v[i]<<" ";}cout<<endl;
}

方法三:大括号分配空间和数据

#include<vector>
void text01(){vector<int> v={1,2,3,4,5,6,7,8,9,10};
}

3.打印方式

方法1:cout下标打印

void text1_01(){int n;cin>>n;vector<int> v(n+1,100);//分配n个int大小的空间,并且初始化为0for(int i=1;i<=v.size()-1;i++){cin>>v[i];}for(int i=1;i<=v.size()-1;i++){cout<<v[i]<<" ";}cout<<endl;
}

方法2:iterator(迭代器)打印

v.begin()是指向数组首元素的迭代器
v.end()是指向数组为元素下一位的迭代器,充当结束的标志(无效迭代器)
vector::iterator iter=v.begin()+1
auto iter=v.begin()+1
void text1_01(){int n;cin>>n;vector<int> v(n+1,100);//分配n个int大小的空间,并且初始化为0for(int i=1;i<=v.size()-1;i++){cin>>v[i];}//迭代器可以类比为指针类型//vector<int>::iterator iter=v.begin()+1;for(auto iter=v.begin()+1;iter!=v.end();iter++){cout<<*iter<<" ";}cout<<endl;
}

方法3:for range(C++11)访问

#include <vector>
vector<int> v={1,2,3,4,5,6,7,8,9,10};
void text01(){for(auto it:v){cout<<it<<" ";}
}

4.初始化和打印练习

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void text2_01(){//vector<Type> v(count,val)-->申请count个Type大小的val
//    vector<int> v0;//没有分配空间int n;cin>>n;vector<int> v0;vector<int> v1{1,2,3,4,5,6,7,8,9,10};vector<int> v2(n);vector<int> v3(n,10);//内置函数push_back()分配空间的同时插入数据cout<<"输入vo:"<<endl;for(int i=0;i<n;i++){int x;cin>>x;v0.push_back(x);}cout<<"push_back输入的for range打印 vo:"<<endl;for(auto it:v0){cout<<it<<" ";}cout<<endl;cout<<"迭代器打印 v1:"<<endl;//迭代器打印for(auto iter=v1.begin();iter!=v1.end();iter++){cout<<*iter<<" ";}cout<<endl;cout<<"输入v2:"<<endl;for(auto& it:v2){cin>>it;}cout<<"for range打印 v2:"<<endl;//for range打印for(auto it:v2){cout<<it<<" ";}cout<<endl;//下标打印cout<<"下标打印 v3:"<<endl;for(int i=0;i<v3.size();i++){cout<<v3[i]<<" ";}
}

5.内置函数

v.erase()

v.insert()

STL中单反涉及迭代器区间的都是左闭右开

void text1_01(){vector<int> v{1,2,3,4,5,6,8,9,10};//分配n个int大小的空间,并且初始化为0//迭代器可以类比为指针类型//vector<int>::iterator iter=v.begin()+1;v.erase(v.begin());for(auto it:v){cout<<it<<" ";}cout<<endl;v.erase(v.begin(),v.begin()+5);for(auto it:v){cout<<it<<" ";}//8 9 10cout<<endl;v.insert(v.begin(),7);for(auto it:v){cout<<it<<" ";}cout<<endl;
}

v.at(i)的定位器和v[i]的区别

v.at(i)定位器如果越界的话会抛出异常
v[i]越界的话会报错
image-20240114003455840

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void text1_01(){vector<int> v{1,2,3,4,5,6,8,9,10};//分配n个int大小的空间,并且初始化为0int i;cin>>i;cout<<v[i];
/*    cout<<v.at(i);*/
}

v.back();//输出数组的最后一位

v.size()

v.capacity()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void text1_01(){vector<int> v{1,2,3,4,5,6,7,8,9,10};//分配n个int大小的空间,并且初始化为0v.erase(v.begin()+9);cout<<v.size()<<endl;cout<<v.capacity()<<endl;
}

6.外置函数sort()

参数有俩种形式 一种是 参一:首元素地址,参二:尾元素地址的下一位,参三:比较规则
另外一直是,参一:指向首元素的迭代器,参二:指向为元素下一位的迭代器,参三:比较规则

STL里面的容器元素使用sort排序必须穿迭代器,例如string、vector数组

但是非STL容器,sort排序可以不穿迭代器,例如string【】数组,int nums【】数组

string s="hello world";
bool cmp(int left,int right){return left>right;
}
void text1_01(){vector<int> v{1,2,3,4,5,6,7,8,9,10};//分配n个int大小的空间,并且初始化为0sort(v.begin(),v.end(),cmp);for(auto it:v){cout<<it<<" ";}
}
void text1_02(){sort(s.begin(),s.end());for(auto it:s){cout<<it;}
}

7.迭代器与反迭代器

image-20240114010436217

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void text1_01(){vector<int> v{5,1,3,2,6,8,1,23,4,9};//分配n个int大小的空间,并且初始化为0sort(v.begin(),v.end());for(auto it:v){cout<<it<<" ";}cout<<endl;sort(v.rbegin(),v.rend());for(auto it:v){cout<<it<<" ";}
}

list容器

0.底层是双向链表

1.基本操作ls.push_back()和ls.pop_back()

2.利用构造函数开辟空间和{ }直接赋值开辟空间

3.打印方式(for range打印、迭代器打印)

4.内置函数

ls.erase、ls.insert、ls.size()、ls.begin()、ls.end()

ls.push_back、ls.push_front()、ls.pop_back()、ls.pop_front()

5.外置函数(list容器没有外置sort函数)

因为即使传入了begin end 迭代器,但是链表是不连续的,所以无法完成排序

bool cmp(int left,int right){return left>right;
}
void text2_01(){list<int> ls{5,4,3,2,1,6,7,8,9,10};
//    sort(ls.begin(),ls.end());
//    ls.sort();
//    for(auto it:ls){
//        cout<<it<<" ";
//    }ls.sort(cmp);for(auto it:ls){cout<<it<<" ";}cout<<endl;ls.pop_front();ls.push_front(11);for(auto it:ls){cout<<it<<" ";}cout<<endl;
}

但是有内置sort函数,内置的不用传迭代器

bool cmp(int left,int right){return left>right;
}
void text2_01(){list<int> ls{5,4,3,2,1,6,7,8,9,10};
//    sort(ls.begin(),ls.end());
//    ls.sort();
//    for(auto it:ls){
//        cout<<it<<" ";
//    }ls.sort(cmp);for(auto it:ls){cout<<it<<" ";}cout<<endl;
}
void text2_01(){list<int> ls{5,4,3,2,1,6,7,8,9,10};auto p=ls.begin();int key;cin>>key;while(*p!=key){p++;}ls.erase(p);for(auto it:ls){cout<<it<<" ";}cout<<endl;ls.insert(ls.end(),1);for(auto it:ls){cout<<it<<" ";}
//    sort(ls.rbegin(),ls.rend());
//    sort(ls.begin(),ls.end());
//    int n;cin>>n;
//    list<int> ls(n,10);
//    for(auto it:ls){
//        cout<<it<<" ";
//    }
//    for(int i=1;i<=n;i++){
//        int x;cin>>x;
//        ls.push_back(x);
//    }
//    for(auto it:ls){
//        cout<<it<<" ";
//    }
//    cout<<endl;
//    ls.pop_back();
//    cout<<"for range打印"<<endl;
//    for(auto it:ls){
//        cout<<it<<" ";
//    }
//    cout<<endl;
//    cout<<"迭代器打印"<<endl;iter++<-->iter=iter->next
//    for(auto iter=ls.begin();iter!=ls.end();iter++){
//        cout<<*iter<<" ";
//    }
}

stack容器

后进先出,先进后厨,LIFO

1.stk.push()

2.stk.pop()

3.stk.empty()

4.stk.top()

void text2_01(){stack<int> stk;stk.push(1);stk.push(2);stk.push(3);stk.push(4);while(!stk.empty()){cout<<stk.top()<<" ";stk.pop();}
}

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

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

相关文章

【ACM出版】第五届计算机信息和大数据应用国际学术会议(CIBDA 2024)

第五届计算机信息和大数据应用国际学术会议&#xff08;CIBDA 2024&#xff09; 2024 5th International Conference on Computer Information and Big Data Applications 重要信息 大会官网&#xff1a;www.ic-cibda.org 大会时间&#xff1a;2024年3月22-24日 大会地点&#…

【JavaEE】_form表单构造HTTP请求

目录 1. form表单的格式 1.1 form表单的常用属性 1.2 form表单的常用搭配标签&#xff1a;input 2. form表单构造GET请求实例 3. form表单构造POST请求实例 4. form表单构造法的缺陷 对于客户端浏览器&#xff0c;以下操作即构造了HTTP请求&#xff1a; 1. 直接在浏览器…

01_02_mysql06_(视图-存储过程-函数(变量、流程控制与游标)-触发器)

视图 使用 视图一方面可以帮我们使用表的一部分而不是所有的表&#xff0c;另一方面也可以针对不同的用户制定不同的查询视图。比如&#xff0c;针对一个公司的销售人员&#xff0c;我们只想给他看部分数据&#xff0c;而某些特殊的数据&#xff0c;比如采购的价格&#xff0…

【web安全】渗透测试实战思路

步骤一&#xff1a;选目标 1. 不建议太小的公司&#xff08;可能都是请别人来开发的&#xff0c;用现成成熟的框架&#xff09; 2. 不建议一线大厂&#xff1a;腾讯&#xff0c;字节&#xff0c;阿里等&#xff0c;你懂的 3. 不建议政府部门&#xff0c;安全设备多&#xff…

线性代数:线性方程组解的结构

目录 齐次/非齐次方程组的解 Ax 0 的解的性质 定理 Ax b 的解的性质 相关证明 例1 例2 例3 齐次/非齐次方程组的解 Ax 0 的解的性质 定理 Ax b 的解的性质 相关证明 例1 例2 例3

从kafka如何保证数据一致性看通常数据一致性设计

一、前言 在数据库系统中有个概念叫事务&#xff0c;事务的作用是为了保证数据的一致性&#xff0c;意思是要么数据成功&#xff0c;要么数据失败&#xff0c;不存在数据操作了一半的情况&#xff0c;这就是数据的一致性。在很多系统或者组件中&#xff0c;很多场景都需要保证…

开源LLMs导览:工作原理、顶级LLM列表对比

目录 一、开源 LLM 是什么意思&#xff1f;二、开源LLM如何工作&#xff1f;2.1 预训练2.2 代币化2.3 开源LLM的微调2.4 输入编码2.5 训练与优化2.6 推理 三、开源LLM对组织的好处3.1 增强的数据安全和隐私3.2 节约成本3.3 减少供应商依赖性3.4 代码透明度 四、哪种LLM模式最好…

51_蓝桥杯_独立按键

一 电路 注意&#xff1a;J5跳帽接到2~3引脚&#xff0c;使按键S4-S5四个按键的另外一端接地&#xff0c;从而成为4个独立按键。 二 独立按键工作原理 三 代码 代码1&#xff1a;按下S7点亮L1指示灯&#xff0c;松开按键&#xff0c;指示灯熄灭&#xff0c;按下S6点亮L2指示灯…

18.贪心算法

排序贪心 区间贪心 删数贪心 统计二进制下有多少1 int Getbit_1(int n){int cnt0;while(n){nn&(n-1);cnt;}return cnt; }暴力加一维前缀和优化 #include <iostream> #include <climits> using namespace std; #define int long long const int N2e510; in…

three.js 3D可视化地图

threejs地图 可视化地图——three.js实现 this.provinceInfo document.getElementById(provinceInfo); // 渲染器 this.renderer new THREE.WebGLRenderer({antialias: true }); this.renderer.setSize(window.innerWidth, window.innerHeight); this.container.appendChild…

智能风控体系之迁徙率应用

为了评估银行资产质量&#xff0c;此前市场和监管层广泛采取不良贷款率作为银行业资产质量的定量指标&#xff0c;然而这只能看出银行资产质量的现状&#xff0c;但是缺乏对未来发展趋势的指导&#xff0c;因此出现了贷款迁徙率指标&#xff0c;用以判断银行不良资产规模的变化…

Linux 权限详解

目录 一、权限的概念 二、权限管理 三、文件访问权限的相关设置方法 3.1chmod 3.2chmod ax /home/abc.txt 一、权限的概念 Linux 下有两种用户&#xff1a;超级用户&#xff08; root &#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff…

论文精读--word2vec

word2vec从大量文本语料中以无监督方式学习语义知识&#xff0c;是用来生成词向量的工具 把文本分散嵌入到另一个离散空间&#xff0c;称作分布式表示&#xff0c;又称为词嵌入&#xff08;word embedding&#xff09;或词向量 Abstract We propose two novel model architec…

跨界计算与控制,强化显控和UI, 君正MPU再添新旗舰--Ingenic MPU X2600隆重发布

近日&#xff0c;北京君正隆重发布MPU芯片新产品X2600。该产品以商业和工业应用的数个细分领域为重点目标市场&#xff0c;兼顾通用处理器应用需求。无论从CPU结构的设计&#xff0c;还是专门控制器和接口的配备&#xff0c;都体现了北京君正MPU团队“技术路线上追求自主跨界&a…

C#知识点-15(匿名函数、使用委托进行窗体传值、反射)

匿名函数 概念&#xff1a;没有名字的函数&#xff0c;一般情况下只调用一次。它的本质就是一个方法&#xff0c;虽然我们没有定义这个方法&#xff0c;但是编译器会把匿名函数编译成一个方法 public delegate void Del1();//无参数无返回值的委托public delegate void Del2(s…

免费搭建个人网盘

免费搭建一个属于个人的网盘。 服务端 详情请参考原网站的服务端下载和安装虚拟磁盘Fuse4Ui可以支持把网盘内容挂载成系统的分区&#xff1b; 挂载工具效果图&#xff1a;应用端应用端的下载 效果图

Meta 发布 MMCSG (多模态智能眼镜对话数据集)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

《图解设计模式》笔记(一)适应设计模式

图灵社区 - 图解设计模式 - 随书下载 评论区 雨帆 2017-01-11 16:14:04 对于设计模式&#xff0c;我个人认为&#xff0c;其实代码和设计原则才是最好的老师。理解了 SOLID&#xff0c;如何 SOLID&#xff0c;自然而然地就用起来设计模式了。Github 上有一个 tdd-training&…

科技快讯:鸿道Intewell操作系统突破国际垄断,引领工控新革命

科东软件Intewell鸿道工业操作系统&#xff0c;已在多种严苛环境下运行检验&#xff0c;并应用于工业控制、智能制造、汽车电子、轨道交通、能源电力、航天航空等实时性要求极高的领域&#xff0c;历经30年的不懈努力和研发迭代&#xff0c;在功能和性能上可以替代风和VxWorks操…

RTP 实时运输协议

目录 1 实时运输协议 RTP 1.1 RTP 的层次 1.2 RTP 分组的首部格式 2 实时运输控制协议 RTCP 2.1 RTCP 分组 1 实时运输协议 RTP 实时运输协议 RTP (Real-time Transport Protocol) 为实时应用提供端到端的运输&#xff0c;但不提供任何服务质量的保证。 需要发送的多媒体…