STL常用库函数复习

news2024/10/3 16:08:02

文章目录

  • 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.coloradmin.cn/o/1194286.html

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

相关文章

使用Python自动检测SSL证书是否过期

目录 一、概述 二、SSL证书过期检测原理 三、Python实现SSL证书过期检测 四、注意事项 总结 一、概述 随着互联网的普及和安全意识的提高&#xff0c;SSL证书的使用变得越来越重要。SSL证书可以提供加密通信&#xff0c;保护用户的数据安全&#xff0c;防止中间人攻击等。…

切换闭锁元件 双位置继电器 TST-AB440GT DC24V 导轨安装

TST440AB-GT双位置继电器用于交直流操作的各种保护和自动控制的装置中&#xff0c;作为切换闭锁元件。 系列型号&#xff1a; DSP2-4A重动继电器&#xff1b;DSP2-2A2B重动继电器&#xff1b; DSP2-3A1B重动继电器&#xff1b;TST440GT双母线切换继电器&#xff1b; TST220GT双…

MIPSsim模拟器 使用说明

&#xff08;一&#xff09; 启动模拟器 双击MIPSsim.exe&#xff0c;即可启动该模拟器。模拟器启动时&#xff0c;自动将自己初始化为默认状态。所设置的默认值为&#xff1a; u所有通用寄存器和浮点寄存器为全0&#xff1b; u内存清零&#xff1b; u流水寄存器为全0&#xff…

Dapp开发流程以及应用

随着区块链技术的发展和普及&#xff0c;Dapp&#xff08;去中心化应用&#xff09;逐渐成为了区块链领域中备受关注的话题。Dapp是一种运行在区块链网络上的应用程序&#xff0c;具有去中心化、透明、安全、自治等特点&#xff0c;能够为人们提供更加便捷、高效、安全的应用体…

Essential Math for AI:高效的人工智能数学原理晋级读物

今天给大家介绍一本人工智能数学原理书籍&#xff1a;Essential Math for AI。作者是Hala Nelson&#xff0c;一位应用数学领域的美女博士&#xff0c;James Madison University (JMU) 大学的助理教授。 关注微信公众号&#xff1a;人工智能大讲堂&#xff0c;后台回复【ema】获…

使用反射调用私有内部类方法

使用反射调用私有内部类方法 通过反射机制调用私有内部类方法,反射机制允许在运行时检查和操作类和方法。可以使用反射机制创建内部类的实例,并调用其私有方法 🍓情况一: 注意这里的内部类是私有静态内部类 待测类如下: package jj;import java.lang.reflect.Constru…

MySQL时间类型注意事项

MySQL常见的时间类型有YEAR、DATE、TIME、DATETIME、TIMESTAMP&#xff0c;绝大多数业务都是精确到秒的&#xff0c;所以通常用后两种。并且MySQL5.6以后后两种支持精度到毫秒&#xff08;最多小数点后6位&#xff09; DATETIME占8字节&#xff0c;不论要不要毫秒 TIMESTAMP占4…

三大赛题指南发布!2023 冬季波卡黑客松本周末开启 Workshop

2023 年一众黑客松赛事中&#xff0c;为什么我们建议您选择波卡黑客松大赛&#xff1f;或许答案在于——作为开发者极度友好的技术生态&#xff0c;波卡能够从参赛者的立场出发&#xff0c;为大家提供从 0 到 1 实现项目孵化成长的机会。这里聚集了一线技术专家的资源力量&…

【Spring】Spring IOCDI详解

文章目录 1. Spring是什么&#xff1f;2. 认识IOC2.1 传统程序开发1. Main.java2. Car.java3. Framework.java4. Bottom.java5. Tire.java 2.2 分析传统开发2.3 IOC程序开发1. Main.java2. Car.java3. Framework.java4. Bottom.java5. Tire.java 2.4 分析IOC开发2.5 IOC容器优点…

剑指offer(C++)-JZ21:调整数组顺序使奇数位于偶数前面(一)(算法-其他)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 输入一个长度为 n 整数数组&#xff0c;实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有的奇数…

外贸SEO外链类型有哪些?外链建设如何做?

外贸SEO外链资源怎么找&#xff1f;海洋建站SEO外链优化方法&#xff1f; 外贸SEO外链在提高网站排名、吸引流量、增加品牌曝光方面发挥着重要作用。海洋建站将探讨外贸SEO外链的不同类型&#xff0c;帮助外贸企业更好地理解如何优化他们的在线营销策略。 外贸SEO外链&#x…

【PostgreSql高阶语法 】1、CASE WHEN THEN END用法

目录 1. 基础描述2. 用法举例2.1 基础使用2.1.1 方式12.1.2 方式 2 2.2 进行分组2.3 分组练习举例 1. 基础描述 目的&#xff1a;在SQL语句中添加判断条件&#xff0c;就要用到CASE WHEN THEN END用法&#xff1a;类似于java里面的switch语句&#xff0c;一组CASE WHEN THEN E…

香港和美国节点服务器的测试IP哪里有?

在选择服务器时&#xff0c;我们通常需要进行一些测试来评估其性能和稳定性。当然&#xff0c;这其中一个重要的测试指标就是服务器的 IP 地址。通过测试 IP 地址&#xff0c;我们可以了解到服务器所在地区以及网络连接质量等信息。作为香港及亚太数据中心领先服务商恒创科技&a…

五种常见的IO模型

目录 一. IO的概述 1.1 什么是IO 1.2 IO的效率问题 1.3 同步IO和异步IO的概念 二. 阻塞式IO 三. 非阻塞式IO 四. 信号驱动式IO 五. IO多路复用 六. 异步IO 七. 总结 一. IO的概述 1.1 什么是IO IO&#xff0c;表示输入输出&#xff0c;即&#xff1a;InPut / OutPut…

苹果15OTG音频转接器方案大卖-无敌成本加兼容性性价比直接拉满

手机拓展坞的组合有何意义&#xff1f;首先是数据存储场景&#xff0c;借助拓展坞扩展出的接口&#xff0c;可以连接U盘、移动硬盘等采用USB接口的设备&#xff0c;实现大文件的快速存储或者流转&#xff1b;其次是图片、视频的读取场景&#xff0c;想要读取相机、无人机SD/TF存…

第十周学习记录

阅读MARS MARS创新点&#xff1a; (1)实例感知。模拟器使用独立的网络分别对前景实例和背景环境进行建模&#xff0c;以便可以单独控制实例的静态&#xff08;例如大小和外观&#xff09;和动态&#xff08;例如轨迹&#xff09;属性。 (2)模块化。模拟器允许在不同的 NeRF 主干…

python操作链接数据库和Mysql中的事务在python的处理

python操作数据库 pymysql模块: pip install pymysql作用:可以实现使用python程序链接mysql数据库&#xff0c;且可以直接在python中执行sql语句 添加操作 import pymysql #1.创建链接对象c conn pymysql.Connect(host127.0.0.1,#数据库服务器主机地址port3306, #mysql的端口…

Pytest系列之参数化

1.parametrize()实现数据驱动 1.1 方法参数详解 pytest.mark.parametrize(arg_name, arg_value) arg_name:参数名称&#xff0c;用于将参数值传递给测试用例 arg_value:参数值(支持列表、字典列表、元组和字典元组)&#xff0c;有n个值&#xff0c;那么测试用例就将执行n次…

node 第十七天 使用rsa非对称加密 实现前后端加密通信 JSEncrypt和node-rsa

什么是非对称加密 加密过程需要两个钥匙, 公钥和私钥 其中公钥用于加密明文, 私钥用于解密公钥加密的密文, 解密只可以用私钥 公钥和私钥是一对一的关系 公钥可以发送给用户, 不用担心泄露 私钥需要保存在服务端, 不能泄露 例如: 战场上&#xff0c;B要给A传递一条消息&#xf…

VC6.0 高亮扩展

输入关键字 "asist vc6.0" 点击网页&#xff1a; https://wws.lanzouj.com/isNmZe9ap2f 几秒后下载成功 在VS2021 安装以下这个扩展 打开vc6.0 代码有高亮了