【STL中容器汇总】map、list、vector等详解
容器学习分享
- 1、STL简介
- 1.1、STL六大组件
- 2、vector容器
- 2.1、vector 基本操作
- 2.2、vector容器示例
- 2.3、vector容器存放自定义数据类型示例
- 2.3、vector嵌套vector示例
- 3、list 容器
- 3.1使用示例
- 3.2、list容器基本函数
- 4、map容器
- 4.1、map函数原型
- 4.2、map函数示例
1、STL简介
STL,标准模板库,是C++标准库的一部分,重在提高了代码的复用性;主要包含了常用的数据结构和基本算法,为广大c++程序员提供了一个可扩展的应用框架。
- STL(Standard Template Library,标准模版库)
- STL从广义上分为:容器(container)算法(algorithm)迭代器(iterator)
- 容器和算法之间通过迭代器进行无缝连接。
- STL几乎所有的代码都采用了模版类或模版函数
1.1、STL六大组件
STL大体分为六大组件,分别是:容器,算法,迭代器,适配器,函数对象,分配器。
- 容器:各种数据结构,如vector,list,map,deque,set等,用来存放数据。
- 算法:提供了一组常见的算法,如排序、查找、拷贝、变换等。
- 迭代器:用于遍历和访问容器中的元素。
- 函数对象:是一种可调用对象,可以像函数一样使用。
- 适配器:是一种设计模式,用于将某个类转换为另一个类的接口。
- 分配器:是用于管理内存分配的组件。它们通常用于动态分配内存,并将分配的内存返回给调用者。
2、vector容器
2.1、vector 基本操作
(1)头文件
#include.
(2)创建vector对象,
vector vec;
(3)尾部插入数字:
vec.push_back(a);
(4)使用下标访问元素
cout<<vec[0]<<endl;记住下标是从0开始的。
(5)使用迭代器访问元素.
vector::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
(6)插入元素:
vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
(7)删除元素:
vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(8)向量大小:
vec.size();
vec.resize;改变大小
(9)清空:
vec.clear();
2.2、vector容器示例
#include <iostream>
#include <algorithm> //标准算法头文件
#include <vector> //包含向量容器头文件
using namespace std ;void myPrint(int val)
{cout<< val <<endl;
}
void test01()
{//创建迭代器vector<int> v;//向容器中添加数据v.push_back(10);v.push_back(20);v.push_back(30);//通过迭代器遍历读取容器中的数据vector<int>::iterator it;for(it=v.begin();it!=v.end();it++){cout<<*it<<endl;}//另一种遍历方式for_each(v.begin(),v.end(),myPrint);
}
int main()
{ test01();return 0;
}
2.3、vector容器存放自定义数据类型示例
#include <iostream>
#include <vector>using namespace std;class Person
{
public:Person(string name,int age){this->name =name;this->age=age;}string name;int age;
};
void test01()
{vector<Person> v;Person p1("aaa",10);Person p2("bbb",20);Person p3("ccc",30);//向容器中添加数据v.push_back(p1);v.push_back(p2);v.push_back(p3);//遍历容器vector<Person>::iterator it;for(it=v.begin();it!=v.end();v++){cout<<(*it).nema<<endl;cout<<(*it).age<<endl;}
}
void test02()
{vector<Person*> v;Person p1("aaa",10);Person p2("bbb",20);Person p3("ccc",30);//向容器中添加数据v.push_back(&p1);v.push_back(&p2);v.push_back(&p3);//遍历容器vector<Person*>::iterator it;for(it=v.begin();it!=v.end();v++){cout<<(*it)->nema<<endl;cout<<(*it)->age<<endl;}
}
int main()
{test01();test02();return 0;
}
2.3、vector嵌套vector示例
#include <iostream>
#include <vector>using namespace std;void test01()
{vector<vector<int>> v;vector<int> v1;vector<int> v2;vector<int> v3;for(int i=0;i<4;i++){v1.push_back(i+1);v2.push_back(i+2);v3.push_back(i+3);}v.push_back(v1);v.push_back(v2);v.push_back(v3);vector<vector<int>>::iterator vs;for(vs=v.begin();vs!=v.end();vs++){//(*vs) --容器 vector<int>vector<int>::iterator vit;for(vit=(*vs).begin();vit!=(*vs).end();vit++){cout<<*vit<<endl;}}}
int main()
{test01();return 0;
}
3、list 容器
功能:将数据进行链式存储
链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链表实现的。
链表的组成:链表是由一系列结点组成
结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域;
STL中的链表是一个双向循环链表

3.1使用示例
#include <iostream>
#include <list>
using namespace std ;
int main(){list<int> Link; //构造一个列表用于存放整数链表int i, key, item; for(i=0;i < 10;i++)// 输入10个整数依次向表头插入{cin>>item;Link.push_front(item);}cout<<“List: ”; // 输出链表list<int>::iterator p=Link.begin();while(p!=Link.end()){ //输出各节点数据,直到链表尾cout <<*p << " ";p++; //使P指向下一个节点}cout << endl;cout << "请输入一个需要删除的整数: ";cin >> key;Link.remove(key); cout << "List: "; // 输出链表p=Link.begin(); // 使P重新指向表头while(p!=Link.end()){ cout <<*p << " ";p++; // 使P指向下一个节点}cout << endl;
}
3.2、list容器基本函数

4、map容器
map容器中所有元素都是pair
pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
所有元素都会根据元素的键值自动排序
4.1、map函数原型

4.2、map函数示例
#include <iostream>
#include <map>
using namespace std;void test()
{ map<int ,int> m; //创建map容器map<int ,int>::iterator it;//创建map容器迭代器//容器插入方式//一m.insert(pair<int,int>(1,10));//二m.insert(make_pair(2,20));//三m.insert(map<int,int>::value.type(3,30));//四m[4]=40;//容器的删除m.erase(m.begin()); //删除容器中首位元素m.erase(3); //删除容器中key为3的元素//查找map<int,int>::iterator pos =m.find(3);if(pos!=m.end()){cout<<"key"<<it->first<<"value"<<it->second<<endl;}}
int main()
{test();return 0;
}
相关文章:
【STL中容器汇总】map、list、vector等详解
容器学习分享 1、STL简介1.1、STL六大组件 2、vector容器2.1、vector 基本操作2.2、vector容器示例2.3、vector容器存放自定义数据类型示例2.3、vector嵌套vector示例 3、list 容器3.1使用示例3.2、list容器基本函数 4、map容器4.1、map函数原型4.2、map函数示例 1、STL简介 ST…...
Semantic Kernel + Natasha:一小时快速生成100个API的奇迹
大家好,我今天带来了一个让人瞠目结舌的实验:在一小时内快速生成了100个API! 其实如果手速高,可以更多。要知道,这得益于之前介绍过的Natasha —— 一个可以动态编译并加载代码的神奇工具。 动态编程神器! 探秘.Net…...
rancher upgrade 【rancher 升级】
文章目录 1. 背景2. 下载3. 安装4. 检查5. 测试5.1 创建项目5.2 创建应用5.3 删除集群5.4 注册集群 1. 背景 rancher v2.8.2 升级 v2.9.1 2. 下载 下载charts helm repo add rancher-latest https://releases.rancher.com/server-charts/latest helm repo update helm fetc…...
【Linux】多线程:线程互斥、互斥锁、线程安全
目录 一、多线程访问公共资源时所产生的问题 二、互斥相关背景概念 互斥量mutex(锁)的引入 三、互斥量 1、初始化互斥量(mutex) 2、互斥量加锁 3、互斥量解锁 4、 销毁互斥量 四、互斥量的使用 1、使用静态互斥量 2、…...
进程之间的通信方式
前言 每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。 Linux提供了以下进程通信方式: 一、管道 所谓的管道,就是内核里面的一串缓存。…...
动手学深度学习(pytorch)学习记录26-卷积神经网路(LeNet)[学习记录]
目录 LeNet模型训练 LeNet 总体来看,LeNet(LeNet-5)由两个部分组成: 卷积编码器:由两个卷积层组成; 全连接层密集块:由三个全连接层组成。 每个卷积块中的基本单元是一个卷积层、一个sigmoid激活函数和平均…...
log4j 和 java.lang.OutOfMemoryError PermGen space
还是OneCoder在项目中沙箱的问题,用classloader隔离做的沙箱,反复运行用户的任务,出现永生区内存溢出: java.lang.OutOfMemoryError: PermGen space 这个问题在tomcat重复热部署的时候其实比较常见。其道理也和我们沙箱的道理基本…...
2024.9.9营养小题【2】
营养: 1、什么数是丑数? 2、数学数学,丑数的数学意义,哎,数学思维我是忘干净了。 3、可以把while循环换成for循环。由此又想到了一点,三个循环结构各有使用场景。 for(;n%factors[i]0;n/factors[i]){}...
uniapp的barcode组件去掉自动放大功能
autoZoom“false” <barcode id1 class"barcode" autoZoom"false" autostart"false" ref"barcode" background"rgb(0,0,0)" frameColor"#1C86EE"scanbarColor"#1C86EE" :filters"fil" ma…...
H5接入Steam 获取用户数据案例
官方文档地址 1.注册 Steam API Key: 你需要一个 Steam Web API Key,可以在 Steam API Key 页面 获取。https://steamcommunity.com/dev/apikey 2.使用 OpenID 登录: 实现 Steam OpenID 登录,以便用户通过 Steam 账户登录你的…...
《A Few Useful Things to Know about Machine Learning》论文导读
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl机器学习作为人工智能领域的重要分支,近年来得到了广泛的关注和应用。Pedro Domingos的经典论文《A Few Useful Things to Know about Machine Learning》为我们提供了对机器学习深入且全面的理解…...
隔壁老樊2024全国巡回演唱会重磅来袭,首站广州正式官宣!
汹涌人潮将城市填满,斑驳心绪漂浮在时间之隙,当生活的喜悲逐渐演化成歌,天空将自己负载的缄默倾泻,那些或酸涩、或热烈的点滴滑落心海,那层悬挂在「我」与世界分野的无形壁垒,渐也被曙光渗透消融。 提炼生…...
【C++】list(下)
个人主页~ list(上)~ list 四、模拟实现1、list.h(1)关于整个list的搭建①节点②迭代器③接口 (2)自定义类型实例化 2、test.cpp(1)test1(2)test2 五、额外小…...
千云物流 -低代码平台MySQL备份数据
windows备份 全量备份 创建备份目录 需要在安装数据库的服务器上创建备份目录,所有如果要做备份至少需要两倍的硬盘空间, mkdir D:\mysql_backup\full_backup准备备份脚本 创建一个windows批处理文件(例如 full_backup.bat),用来执行全量…...
MySQL:进阶巩固-视图
目录 一、视图的概述二、视图的基本使用2.1 创建视图2.2 查询视图2.3 修改视图2.4 删除视图 一、视图的概述 视图是一种虚拟存在的表,视图中的数据并不在数据库中实际的存在,行列数据来自于视图中查询的表,并且是在使用视图时动态生成的。 通…...
分布式事务Seata原理及其项目使用
0.Seata官方文档 1.Seata概念及原理 Seata是什么 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 Seata主要由三个重要组…...
JS_分支结构
if结构 这里的if结构几乎和JAVA中的一样,需要注意的是 if()中的非空字符串会被认为是trueif()中的非零数字会被认为是trueif()中的非空对象会被认为是true <script> if(false){// 非空字符串 if判断为true console.log(true) }else{ console.log(false) } if(){// 长度…...
决策树(Decison Tree)—有监督学习方法、概率模型、生成模型、非线性模型、非参数化模型、批量学习
定义 ID3算法 输入:训练数据集(T= { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } \left\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\right\} {(x1,y1),(x2,y2),⋯,(xN,yN)}),特征集A阀值 ε \varepsilon ε 输出:决策树T (1)若D中所有实例属于同一…...
java 自定义注解校验实体类属性
直接上代码 1.是否启用参数校验注解 Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface EnableArgumentsCheck {/*** 是否启用*/boolean enable() default true;} 2.参数校验自定义注解 /*** 参数校验自定义注解* 属性定义&#…...
光伏并网发电系统中电能质量监测与优化技术探讨
0引言 随着清洁能源技术的持续进步与广泛应用,光伏并网发电系统亦逐步崭露头角。作为一种关键的电力供应方式,其受到了广泛的关注。然而,由于天气等外部条件的影响,光伏发电系统面临若干挑战。电能质量问题,诸如电压波…...
手把手教你学 Simulink-- 开关磁阻电机(SRM)的转矩分配函数(TSF)控制仿真
目录 手把手教你学 Simulink-- 开关磁阻电机(SRM)的转矩分配函数(TSF)控制仿真 🔥 前言:为什么选 SRM+TSF? 一、SRM 基础:12/8 极结构与数学模型 1.1 电压方程(第 k 相) 1.2 转矩方程(强非线性) 二、TSF 核心原理:一句话讲透 2.1 四种常用 TSF 公式(含参数…...
RMAN 增量备份(Incremental Backup)
1、概念RMAN 增量备份是指 RMAN 只备份自上次备份以来发生过更改的数据块,而不是备份整个数据库的所有数据块。它是 Oracle 为解决大型数据库全量备份时间长、占用空间大的问题而设计的核心特性,也是现代企业级备份策略的基础。简单类比:全库…...
为什么92%的Lindy自动化项目在第90天遭遇断崖式停滞?资深架构师紧急披露3个临界预警信号
更多请点击: https://intelliparadigm.com 第一章:为什么92%的Lindy自动化项目在第90天遭遇断崖式停滞?资深架构师紧急披露3个临界预警信号 当Lindy自动化项目运行至第90天左右,系统吞吐量骤降40%、任务积压率突破68%、人工干预频…...
紧急预警:2024年底起,欧盟CSRD与国内《电力人工智能应用安全规范》将强制要求Agent可解释性审计——3类高危黑箱行为自查清单
更多请点击: https://codechina.net 第一章:AI Agent能源行业应用 AI Agent正以前所未有的深度融入能源行业的核心环节,从智能电网调度、风/光功率预测,到设备故障诊断与碳排优化决策,其自主感知、推理与执行能力显著…...
GPT-4稀疏激活机制解析:1.8万亿参数为何仅用2%
1. 项目概述:参数规模与稀疏激活的真相拆解“GPT-4 Has 1.8 Trillion Parameters. It Uses 2% of Them Per Token.”——这句话过去两年在技术社区被反复引用、误读、放大,甚至成为AI算力焦虑的具象化符号。但作为从2017年就开始部署LSTM语音模型、2019年…...
认知殖民与范式陷阱:当代人工智能发展路径的文明危机研究
认知殖民与范式陷阱:当代人工智能发展路径的文明危机研究摘要本文从文明安全与认知主权视角出发,系统批判了当前以Transformer架构、Scaling Law和大语言模型为核心的人工智能技术范式。研究指出,该范式不仅是技术路径的选择,更是…...
美国联邦AI资助逻辑:问题驱动型资金如何塑造技术路线
1. 项目概述:这不只是经费数字,而是AI技术路线的投票器“联邦政府对人工智能研究的资金投入现状”——这个标题乍看像一份政策简报的副标题,但在我过去十年跟踪科技政策与AI产业交叉点的过程中,它实际是一把解剖美国创新生态系统的…...
五轴龙门机床厂家推荐,五轴龙门机床哪家好?
五轴龙门机床厂家推荐,五轴龙门机床哪家好?五轴龙门机床性能参数与场景适配分析。五轴龙门机床是高端装备制造的核心加工设备,广泛应用于航空航天、新能源、重工装备等领域。本文基于海天精工、纽威数控、环球工业机械、济南二机床四款主流国…...
汽车12V电源防护:P6KE TVS二极管选型、设计与实战指南
1. 项目概述:汽车电源线上的“隐形保镖”在汽车电子系统的设计里,12V直流电源线是整车的能量动脉,从蓄电池到ECU(发动机控制单元)、从车身控制器到娱乐系统,几乎所有的电子模块都离不开它。但这条“动脉”所…...
如何通过NVIDIA Profile Inspector深度优化游戏性能:解锁显卡隐藏设置的完整指南
如何通过NVIDIA Profile Inspector深度优化游戏性能:解锁显卡隐藏设置的完整指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否曾经感到困惑,为什么同样的显卡配置&…...
