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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能基础——Python:Numpy与矩阵

人工智能的学习之路非常漫长&#xff0c;不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心&#xff0c;我为大家整理了一份600多G的学习资源&#xff0c;基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

vue项目中订单完成提交按钮动画

1. 动画1 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>Order</title><!-- <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/re…

时序预测 | MATLAB实现WOA-CNN-LSTM-Attention时间序列预测(SE注意力机制)

时序预测 | MATLAB实现WOA-CNN-LSTM-Attention时间序列预测&#xff08;SE注意力机制&#xff09; 目录 时序预测 | MATLAB实现WOA-CNN-LSTM-Attention时间序列预测&#xff08;SE注意力机制&#xff09;预测效果基本描述模型描述程序设计参考资料 预测效果 基本描述 1.MATLAB实…

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

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

微软宣布称Windows 再不会偷偷下载更新文件,真的吗?

导读时钟拨回到2015年&#xff0c;微软刚刚推出Windows 10操作系统时&#xff0c;一些Windows 7用户首次在线Update的升级文件大小居然高达6~8GB。这件事引发了大量的不满&#xff0c;一些按照流量计费和宽带不给力的用户怨言极为严重&#xff0c;其中德国用户把此事闹上了当地…

嵌入式中常见的显示屏接口有哪些?

显示屏接口一般有I2C、SPI、UART、RGB、LVDS、MIPI、EDP和DP等。下面简要总结一下。 01 中小屏接口I2C、SPI、UAR 一般3.5寸以下的小尺寸LCD屏&#xff0c;显示数据量比较少&#xff0c;普遍采用低速串口&#xff0c;如I2C、SPI、UART。 I2C&#xff1a; I2C总线是半双工&…

TCC分布式事务----以Hmily框架为例

插曲&#xff1a;RocketMQ的Half Message 先引入一个插曲&#xff0c;RocketMQ为什么要有Half Message 为什么不在本地事务提交之后&#xff0c;直接发一个commit消息不就行了&#xff0c;为什么还要先发一个可以撤回的、不能被消费的half message&#xff0c;再执行本地事务…

剑指JUC原理-18.同步协作

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

王道数据结构课后代码题p150 15.设有一棵满二叉树(所有结点值均不同),已知其先序序列为 pre,设计一个算法求其后序序列post。(c语言代码实现)

对一般二叉树&#xff0c;仅根据先序或后序序列&#xff0c;不能确定另一个遍历序列。但对满二叉树&#xff0c;任意一个结点的左、右子树均含有相等的结点数&#xff0c;同时&#xff0c;先序序列的第一个结点作为后序序列的最后个结点。 本题代码如下 void pretopost(char …

神奇工具!这7个软件让设计轻松起飞

作为一个设计小白&#xff0c;你还在问前辈们有没有好的设计软件吗&#xff1f;还是没地方问&#xff0c;只能去百度搜索&#xff1f;如果是这样&#xff0c;那么接下来的文章正好可以解决你的问题。本文将介绍7种常用的平面设计工具&#xff0c;每种平面设计工具都有自己的特点…

由于找不到msvcp140_1.dll无法继续执行代码怎么解决

msvcp140_1.dll是Microsoft Visual C库文件之一&#xff0c;丢失后可能导致程序无法正常运行。以下是一些关于解决msvcp140_1.dll丢失问题的方法以及丢失原因的介绍。 一、msvcp140_1.dll是什么&#xff1f; 作用&#xff1a;msvcp140_1.dll是Microsoft Visual C库文件&#…

JVS低代码表单自定义按钮的使用说明和操作示例

在普通的表单设计中&#xff0c;虽然自带的【提交】、【重置】、【取消】按钮可以满足基本操作需求&#xff0c;但在面对更多复杂的业务场景时&#xff0c;这些按钮的显示控制就显得有些力不从心。为了更好地满足用户在表单操作过程中的个性化需求&#xff0c;JVS低代码推出了表…

切换数据库的临时表空间为temp1 / 切换数据库的undo表空间为 undotbs01

目录 ​编辑 一、切换临时表空间 1、登录数据库 2、查询默认临时表空间 3、创建临时表空间temp1&#xff08;我们的目标表空间&#xff09; 4、修改默认temp表空间 5、查询用户默认临时表空间 6、命令总结&#xff1a; 二、切换数据库的undo表空间 1、查询默认undo表…

STM32——端口复用与重映射概述与配置(HAL库)

文章目录 前言一、什么是端口复用&#xff1f;什么是重映射&#xff1f;有什么区别&#xff1f;二、端口复用配置 前言 本篇文章介绍了在单片机开发过程中使用的端口复用与重映射。做自我学习的简单总结&#xff0c;不做权威使用&#xff0c;参考资料为正点原子STM32F1系列精英…

大话IEC104 规约

2. iec104 协议的帧结构 iec104 基于TCP/IP 传输&#xff0c;是一个应用层协议&#xff0c; 其帧结构被称为 APDU&#xff0c;APDU 一般由 APCI 和 ASDU组成。 2.1 APDU (Application Protocol Data Unit) APDU 被称为应用协议数据单元&#xff0c;也就是一个iec104 的协议帧…

【修车案例】一波形一案例(12)

故障车型&#xff1a;丰田CHR 故障现象&#xff1a;发动机异常抖动&#xff0c;尤其是在怠速时&#xff0c;诊断仪显示气缸3失火&#xff0c;先后更换过点火线圈、喷油嘴等&#xff0c;仍然没有修复。 示波器诊断&#xff1a;用示波器采集发动机怠速时气缸2、气缸3的压力波形。…

【Docker】Docker 网络

引言 Docker是一个开源的应用容器引擎&#xff0c;它允许开发者将应用及其依赖打包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器或Windows机器上&#xff0c;也可以实现虚拟化。Docker的主要优势之一是其网络功能&#xff0c;而网络功能的核心就是网络驱动…

浅析网络协议-HTTP协议

1.HTTP简介 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议来传递数据&#xff08;HTML 文件, 图…

安卓手机搭建博客网站发布公网访问:Termux+Hexo结合内网穿透工具轻松实现

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

史上最详细的测试用例写作规范

软件测试用例得出软件测试用例的内容&#xff0c;其次&#xff0c;按照软件测试写作方法&#xff0c;落实到文档中&#xff0c;两者是形式和内容的关系&#xff0c;好的测试用例不仅方便自己和别人查看&#xff0c;而且能帮助设计的时候考虑的更周。 一个好的测试用例必须包含…