STL常用库函数复习

文章目录

  • pair
  • vector
  • list
  • stack
  • queue
    • queue
    • priority_queue
    • queue双端队列
  • set
    • ✨set集合
    • ✨multiset 多重集合
    • 了解:unordered_set 无序集合
  • map
    • 🌟map
    • 几乎不用:multimap
    • 一般不用:undered_map

pair

  • utility
  • 示例
#include <iostream>
#include <utility>using namespace std;int main() {pair<int,double> p1(1,3.14);pair<char,string> p2('a',"hello");cout<<p1.first<<", "<<p1.second<<endl;cout<<p2.first<<", "<<p2.second<<endl;return 0;
}
  • 嵌套
  • 例如:三维坐标
#include <iostream>
#include <utility>using namespace std;int main() {pair<int,int> p1(1,2);pair<int,pair<int,int>> p2(3,make_pair(4, 5));pair<pair<int,int>,pair<int,int>> p3(make_pair(6, 7),make_pair(3, 5));cout<<p1.first<<", "<<p1.second<<endl;cout<<p2.first<<", "<<p2.second.first<<", "<<p2.second.second<< endl;cout<<p3.first.first<<" ,"<<p3.first.second<<" ,"<<p3.second.first<<" ,"<<p3.second.second<<endl;return 0;
}
  • 示例
#include <iostream>
#include <utility>
#include <vector>using namespace std;
struct Person{string name;int age;
};
int main() {vector<Person> people;people.push_back({"Alice",25});people.push_back({"Bob",30});people.push_back({"Charlie",20});vector<pair<Person, int>> scores;scores.push_back({people[0],90});scores.push_back({people[1],85});scores.push_back({people[2],95});for(const auto& pair : scores){cout<<"Name: "<<pair.first.name<<endl;cout<<"Age: "<<pair.first.age<<endl;cout<<"Score: "<<pair.second<<endl;cout<<endl;}return 0;
}

vector

  • 一般用 i<size()或者 (int)size(),如果vector 为空,size()-1 会是很大的数

  • push_back()

  • pop_back()

  • insert()

  • erase()

  • empty()

  • resize()

  • begin(),end()

  • clear()

  • sort()

  • unique()

  • 排序并去重:vec.erase(unique(vec.begin(),vec.end()),vec.end());

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> vec = {2,1,3,2,4,1,5,4};std::sort(vec.begin(),vec.end());auto last = unique(vec.begin(),vec.end());vec.erase(last,vec.end());for(const auto& num:vec){std::cout<<num<<" ";}return 0;
}

list

  • 用的很少,如果需要链表一般用数组模拟或手写链表
  • 如果需要随机访问,一半用 vector(),deque()
  • push_back()
  • push_front()
  • pop_back()
  • pop_front()
  • size()
  • empty()
  • clear()
  • front()
  • back()
  • begin()
  • end()
  • insert()
  • erase()

stack

  • push()
  • pop()
  • top()
  • empty()
  • size()
  • 将数组元素依次入栈,再依次出栈,可以将数组翻转。(一般不会这么做)

queue

queue

以下都是 O(1)

  • push(x)
  • pop()
  • front()
  • empty()
  • size()

priority_queue

  • push(x)

  • pop()

  • top()

  • empty()

  • size()

  • #include

  • priority_queue(int,vector,compare/greater) //小根堆

struct Compare{bool operator()(int a,int b){return a>b;}
}

queue双端队列

  • 不常用
  • push_back(x)
  • push_front(x)
  • pop_back()
  • pop_front()
  • front()
  • back()
  • empty()
  • size()
  • clear()
    在这里插入图片描述
#include<bits/stdc++.h>using namespace std;int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int m;cin>>m;queue<string> V,N;while(m--){string op;cin>>op;if(op=="IN"){string name,q;cin>>name>>q;if(q=="V")V.push(name);else N.push(name);}else{string q;cin>>q;if(q=="V")V.pop();else N.pop();}}while (V.size()) {cout<<V.front()<<'\n';V.pop();}while(N.size()){cout<<N.front()<<"\n";N.pop();}return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>using namespace std;
using ll = long long;int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cin>>n;priority_queue<ll,vector<ll>,greater<ll>> pq;for(int i=1;i<=n;++i){ll x;cin>>x;pq.push(x);}ll ans = 0;while(pq.size()>=2){ll x = pq.top();pq.pop();ll y = pq.top();pq.pop();ans += x+y;pq.push(x+y);}cout<<ans<<"\n";return 0;
}

set

✨set集合

  • 无重复,默认降序
  • insert(x)
  • erase(x)
  • find(x)
#include<iostream>
#include<set>
using namespace std;
int main( ){set<int,greater<int>> mySet;mySet.insert(25);mySet.insert(17);mySet.insert(39);mySet.insert(42);for(const auto& elem:mySet)cout<<elem<<" ";cout<<endl;return 0;
}
#include<iostream>
#include<set>
using namespace std;struct MyCompare{bool operator()(const int& a,const int& b)const{return a>b;}
};int main( ){set<int,MyCompare> mySet;mySet.insert(25);mySet.insert(17);mySet.insert(39);mySet.insert(42);for(const auto& elem : mySet){cout<< elem << " ";}cout<<endl;return 0;
}

✨multiset 多重集合

  • 允许存储重复元素
  • 二分:
    • lower_bound:返回第一个不小于给定值的迭代器
    • upper_bount:返回第一个不大于给定值的迭代器
  • st.erase(st.find(x))

了解:unordered_set 无序集合

  • 无重复,无顺序

map

🌟map

  • 存储键值对
#include <iostream>  
#include <map>  
using namespace std;  int main() {  //创建并初始化multimap  multimap<int, string> myMultimap = {{1, "Apple"}, {2, "Banana"}, {3, "Orange"}};  //判断元素是否存在  if (myMultimap.count(2) == 0) {  cout << "Key 2 not found." << endl;  }  //插入元素  myMultimap.insert(make_pair(4, "Grapes"));  //清空multimap  myMultimap.clear();  //判断multimap是否为空  if (myMultimap.empty()) {  cout << "Multimap is empty." << endl;  } else {  //查找和访问元素  auto range = myMultimap.equal_range(3);  for (auto it = range.first; it != range.second; ++it) {  cout << "Key: " << it->first << ", Value: " << it->second << endl;  }  }  //遍历并打印multimap中的元素  for (const auto& pair : myMultimap) {  cout << "Key: " << pair.first << ", Value: " << pair.second << endl;  }  //删除元素  myMultimap.erase(3);  return 0;  
}

几乎不用:multimap

一般不用:undered_map

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

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

相关文章

【教3妹学编程-算法题】 在树上执行操作以后得到的最大分数

3妹&#xff1a;2哥&#xff0c;今日都立冬了&#xff0c; 可是天气一点都不冷。 2哥 : 立冬了&#xff0c;晚上要不要一起出去吃饺子&#xff1f;&#x1f95f; 3妹&#xff1a;好呀好呀&#xff0c;2哥请吃饺子喽 2哥 : 歪歪&#xff0c;我说的是一起出去吃&#xff0c;没说我…

以 Kubernetes 原生方式实现多集群告警

作者&#xff1a;向军涛、雷万钧 来源&#xff1a;2023 上海 KubeCon 分享 可观测性来源 在 Kubernetes 集群上&#xff0c;各个维度的可观测性数据&#xff0c;可以让我们及时了解集群上应用的状态&#xff0c;以及集群本身的状态。 Metrics 指标&#xff1a;监控对象状态的量…

C++day6作业

1.思维导图 2.编程题&#xff1a; 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&am…

[autojs]用户界面GUI编程

用户界面: UI视图: View attr(name, value)attr(name)whidgravitylayout_gravitymarginmarginLeftmarginRightmarginTopmarginBottompaddingpaddingLeftpaddingRightpaddingToppaddingBottombgalphaforegroundminHeightminWidthvisibilityrotationtransformPivotXtransformPivo…

5-爬虫-打码平台、打码平台自动登录打码平台、selenium爬取京东商品信息、scrapy介绍安装、scrapy目录结构

1 打码平台 1.1 案例 2 打码平台自动登录打码平台 3 selenium爬取京东商品信息 4 scrapy介绍安装 5 scrapy目录结构 1 打码平台 # 1 登录某些网站&#xff0c;会有验证码---》想自动破解-数字字母&#xff1a;python模块&#xff1a;ddddocr-计算题&#xff0c;成语题&#xf…

如何评价现在的CSGO游戏搬砖市场

如何评价现在的csgo市场&#xff1f; 其实整个搬砖市场&#xff0c;现在已经变得乌烟瘴气&#xff0c;散发着“恶臭”。我个人非常鄙视那些虚有其表&#xff0c;大小通吃的做法&#xff0c;那些甚至连搬砖数据都看不懂的人&#xff0c;也出来吹嘘着“实力强大&#xff0c;经验丰…

本地生活新赛道-视频号团购怎么做?

目前有在做实体行业的商家一定要看完&#xff0c;只要你进入了这个本地生活新的赛道&#xff0c;那你的生意自然会源源不断&#xff0c;那这个赛道又是什么呢&#xff1f; 这就是十月份刚刚上线的视频号团购项目&#xff0c;开通团购之后&#xff0c;就可以通过发短视频&#…

深度学习pytorch之hub模块

pytorchhub模块里面有很多模型 https://pytorch.org/hub/ github网址&#xff1a;https://github.com/pytorch/pytorch import torch model torch.hub.load(pytorch/vision:v0.10.0, fcn_resnet50, pretrainedTrue) # or # model torch.hub.load(pytorch/vision:v0.10.0, fc…

Linux C语言进阶-D15递归函数和函数指针

递归函数 指一个函数的函数体中直接或间接调用了该函数本身 执行过程分为两个过程&#xff1a; 递推过程&#xff1a;从原问题出发&#xff0c;按递归公式递推从未知到已知&#xff0c;最终达到递推终止条件 回归阶段&#xff1a;按递归终止条件求出结果&#xff0c;逆向逐步…

2023最新版本 FreeRTOS教程 -10-事件组(通过5种情况快速上手)

事件组对应单个事件触发或多个事件同时触发的场景 创建事件组函数 EventGroupHandle_t xEventGroupCreate( void );删除事件组函数 void vEventGroupDelete( EventGroupHandle_t xEventGroup )设置事件 在任务中使用xEventGroupSetBits() 在中断中使用xEventGroupSetBits…

【Proteus仿真】【51单片机】水质监测报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LED、蜂鸣器、LCD1602、PCF8591 ADC、PH传感器、浑浊度传感器、DS18B20温度传感器、继电器模块等。 主要功能&#xff1a; 系统运行后&…

商业计划书PPT怎么做?这个AI软件一键在线生成,做PPT再也不求人!

商业计划书是一份重要的书面文件&#xff0c;它通常被用作商业估值、筹资和进一步扩大业务的基础。一个好的商业计划书能够让团队向投资者、潜在客户和业务合作伙伴展示其企业的价值&#xff0c;并且清楚地阐述企业的产品或服务能够如何满足市场需求。作为商业计划书的重要组成…

HuggingFace的transfomers库

pipeline from transformers import pipelineclassifier pipeline("sentiment-analysis")#自动下载模型和tokenizer classifier("We are very happy to show you the &#x1f917; Transformers library.")#[{label: POSITIVE, score: 0.9998}] #输入多…

C# OpenCvSharp 玉米粒计数

效果 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Text; using System.Windows.Forms;namespace OpenCvSharp_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string fileFilter "*.*|*.bmp;…

【C++】STL 标准模板库 ③ ( STL 容器简介 | STL 容器区别 | STL 容器分类 | 常用的 STL 容器 )

文章目录 一、STL 容器简介1、STL 容器区别2、STL 容器分类3、常用的 STL 容器 一、STL 容器简介 1、STL 容器区别 STL 容器 用于管理 一组 数据元素 , 不同类型的 STL 容器 的区别 主要是 节点 和 节点之间的关系模型 不同 ; 容器的内存空间是否连续 : 向量 vector 的内存空间…

跟着森老师学React Hooks(1)——使用Vite构建React项目

Vite是一款构建工具&#xff0c;对ts有很好的支持&#xff0c;最近也是在前端越来越流行。 以往的React项目的初始化方式大多是通过脚手架create-react-app(本质是webpack)&#xff0c;其实比起Vite来构建&#xff0c;启动会慢一些。 所以这次跟着B站的一个教程&#xff0c;使用…

生态环境领域基于R语言piecewiseSEM结构方程模型

结构方程模型&#xff08;Sructural Equation Modeling&#xff0c;SEM&#xff09;可分析系统内变量间的相互关系&#xff0c;并通过图形化方式清晰展示系统中多变量因果关系网&#xff0c;具有强大的数据分析功能和广泛的适用性&#xff0c;是近年来生态、进化、环境、地学、…

【2】Spring Boot 3 项目搭建

目录 【2】Spring Boot 3 初始项目搭建项目生成1. 使用IDEA商业版创建2. 使用官方start脚手架创建 配置与启动Git版本控制 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持 &#x1f4af; 【2】Spring Boot 3 初始项目搭建 项目生成 1. 使用IDEA商业版创…

JVM-虚拟机的故障处理与调优案例分析

案例1&#xff1a;大内存硬件上的程序部署策略 一个15万PV/日左右的在线文档类型网站最近更换了硬件系统&#xff0c;服务器的硬件为四路志强处理器、16GB物理内存&#xff0c;操作系统为64位CentOS 5.4&#xff0c;Resin作为Web服务器。整个服务器暂时没有部署别的应用&#…

通过 dump 虚拟机线程方法栈和堆内存来分析 Android 卡顿和 OOM 问题

作者&#xff1a;Tans5 Android 中的性能问题无非就是卡顿和 OOM&#xff0c;虽然总体就这两种&#xff0c;但是造成这两种性能问题的原因却是非常多&#xff0c;需要具体的原因具体分析&#xff0c;而且这是非常复杂的。本篇文章只是简单介绍如何找到造成这些问题的直接原因的…