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,一经查实,立即删除!

相关文章

DAY48 121. 买卖股票的最佳时机 + 122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 题目要求&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择某一天买入这只股票&#xff0c;并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润…

调用API接口获取淘宝商品评论:方法与实战

一、引言 淘宝作为中国最大的电商平台之一&#xff0c;提供了丰富的商品信息和用户评价数据。对于开发者、数据分析师或电商从业者来说&#xff0c;获取淘宝商品评论数据具有重要的应用价值。本文将详细介绍如何调用淘宝API接口来获取商品评论数据&#xff0c;并给出相应的代码…

【教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…

MySQL MyISAM存储引擎的优缺点以及数据文件的类型

目录 优缺点 优点 1. 加锁与并发 2. 修复 3. 索引特性 1&#xff09;B-Tree 索引 2&#xff09;R-Tree 索引 3&#xff09;Full-text 索引 缺点 物理存储 1&#xff09;静态型 2&#xff09;动态型 3&#xff09;压缩型 MyISAM 存储引擎是 MySQL 中常见的存储引擎…

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

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

[模块]ES6与cjs的混合开发

[模块]ES6与cjs的混合开发 模块语言混合开发的原因Nodejs中使用ES6关于动态加载的讲解 项目的模块语言CJS 与 ESM 开发模块的使用方法普通模块引入json 文件的引入普通模块导出 CJS兼容ESMESM兼容CJS(推荐)全局变量--dirname-filename-esm库 问题Error: EPERM: operation not p…

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

目前有在做实体行业的商家一定要看完&#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…

人工智能与机器学习

人工智能和机器学习是目前科技领域最热门的话题之一&#xff0c;它们正在改变着我们的生活和工作方式。本文将从多个角度探讨人工智能和机器学习的应用和发展&#xff0c;以期为读者提供更全面的了解。 一、人工智能和机器学习的定义 人工智能&#xff08;Artificial Intelli…

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

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

如何提高网站安全防护?

网站的安全问题一直是很多运维人员的心头大患&#xff0c;一个网站的安全性如果出现问题&#xff0c;那么后续的一系列潜在危害都会起到连锁反应。就好像网站被挂马&#xff0c;容易遭受恶意请求呀&#xff0c;数据泄露等等都会成为杀死网站的凶手。 高防CDN不仅可以有效抵御各…

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;…