蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器

学习目标:

博主介绍: 27dCnc
专题 : 算法题入门
👍👍👍👍👍👍👍👍👍👍👍👍
☆*: .。. o(≧▽≦)o .。.:*☆

主题: C++ 基础语法

今日份打卡

在这里插入图片描述

  • 蓝桥杯基础语法

学习内容:

  1. 小明和完美序列
  2. 顺子日期
  3. STL
  4. 掌握时间管理

内容详细 :

小明和完美序列

题目考点 : STL map 哈希表 基础语言条件判断

在这里插入图片描述

详细思路
运用哈希表去储存出现的次数然后再统计出现次数
最中要的的是情况判断:

1. 如果统计的数字出现次数大于我们数字本身,减去多余部分
2. 小于数字本身 减去所有出现数字

代码 :

#include<bits/stdc++.h>
#define Run 0
#define endl "\n"
#define N 105
using ll = long long;
using namespace  std;


void slove() {
    int n;cin >> n;
    map<int,int>mp;
    int a[n + 5];
    int ans = 0;
    for (int i = 0; i < n; i++) { cin >> a[i]; mp[a[i]]++; }
    for (auto& [x,y] : mp) { //x带表当前数字 , y代表当前数字出现的次数
        if (y > x) ans += (y - x); //如果当前数字出现次数大于 我们数字 减去多余部分
        if (y < x) ans += y;  // 如果当前出现次数小于数字 减去我们所有出现数字
    }
    cout << ans;
}


int main() {
    cin.tie(0) -> ios::sync_with_stdio(0);
    cout.tie(0) -> ios::sync_with_stdio(0);
    #if Run
        int _;cin>>_;while(_--) slove();
    #else 
        slove();
    #endif
    return 0;
}

在这里插入图片描述

顺子日期

题目考点 : 模拟 思维

在这里插入图片描述

代码

#include<bits/stdc++.h>
using namespace std;

const int Day[] = {31,28,31,30,31,30,31,31,30,31,30,31};

void slove(){
    int ans = 0;
    for(int month = 1;month<=12;month++){
        int a = month / 10,b = month % 10;
        for(int day = 1;day <= Day[month-1];day++){
            int c = day / 10,d = day % 10;
            if(b + 1 == c) {
                if(a + 1 == b || c + 1 == d) {
                    ans++;
                }
            }
        }
    } 
    cout<<ans<<endl;
}

int main(){
    int T = 1;
    while(T--) slove();
}

注释
在这里插入图片描述

STL

pair

pair位于 <utility>
在这里插入图片描述

pair 包含两种类型 两种类型 可以 不同
用于组成键值对 俩个参数变量 fistsecond
pair类还有一些成员函数和特性,例如默认构造函数、节带参数的构造函数、比较运算符重载等

piar实例
在这里插入图片描述
以上代码创建了两个pair对象,分别包含不同类型的值。然后,通过访问first和second成员变量,输出了这些值

pair嵌套

pair可以进行嵌套,也就是说可以将一个pair对象作为另一个pair对象的成员通过嵌套pair,你可以方便地组合多个值,并形成更复杂的数据结构。例如,你可以创建一个三维坐标系的点,其中第1个维度由一个整数表示,第2、3个维度由一个pair表示。
在这里插入图片描述

pair自带的排序规则

pair自带的排序规则是按照first成员进行升序排序。如果first成员相等,则按照second成员进行升序排序,这意味着当你使用标准库中的排序算法(如std::sort)又对包含pair对象的容器进行排序时会根据pair对象的first成员进行排序。
在这里插入图片描述

可以自定义比较函数

在这里插入图片描述
在这里插入图片描述

vector

vector定义和特性
在这里插入图片描述

其中 T 代表类型

template< typename T>

容器大小: vector 是动态数组可以根据需要自动调节容器大小

元素访问 : 可以使用索引访问数组元素 从 0 开始 最后一个元素的索引是 size() - 1 ,用 [] (方括号) 或者 at() 来访问元素
PS : size()返回的的是uint 类型 如果vector为空 - 1 会得到很大的数 越界 一般for循环 < size() 而不是 <= size() - 1

元素的添加和删除

  1. 使用 push_back() 在vector的末尾添加元素 , 使用
  2. 使用 pop_back() 在元素末尾删除元素
  3. 使用 insert() 在指定位置插入元素
  4. 使用 erase() 删除指定位置的元素

容器大小管理 :

  1. 使用 size()获取 vector 中的元素数量
  2. 使用 empty() 检查 vector 是否为空
  3. 使用 resize() 重新定义 vector 大小

迭代器 begin() end

vector常用函数
注意 : 在 pop_back() 时vector 为非空
在这里插入图片描述

vector排序去重

排序
在这里插入图片描述
去重

unique() 将重复元素移动到元素末尾
在这里插入图片描述

代码示例

在这里插入图片描述

运行结果
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

经典去重语句

numbers.erase(std::unique(numbers.begin(), numbers.end()), numbers.end());

list(双向链表容器)

定义和结构
ist的使用频率不高,在做题时几乎遇不到需要使用list的情景。
list是一种双向链表容器,它是标准模板库(STL)提供的一种序列容器。1ist容器以节点(node)的形式存储元素,并使用指针将这些节点链接在一起,形成一个链表结构。list容器结构如下:
在这里插入图片描述
具有双向性 : 有 prevnext
内存地址不连续,插入删除元素不导致元素移动

示例
在这里插入图片描述
访问查找为 O ( n ) O(n) O(n)
查找为 O ( 1 ) O(1) O(1)

list常用函数

在这里插入图片描述

stack

stack 的定义和结构

stack是一种后进先出(LIFO)的数据结构,使用前需要包含头文件stack提供了一组函数来操作和访问元素,但它的功能相对较简单。stack的定义和结构如下(仅作了解即可):
在这里插入图片描述

结构

在这里插入图片描述
stack 只能对栈顶元素进行操作

stack 的常用函数

在这里插入图片描述

小tips:如果将一个数组的元素依次放入栈,再依次取出,则可以将数组翻转。

代码示例
top() 会获取栈顶元素不弹出元素
在这里插入图片描述

queue

在这里插入图片描述
与日常生活中的排队类似

prority_queue 优先队列 (堆 理论)

priority_queue与普通队列不同,priority_queue中的元素是按照一定的优先级进行排序的。默认情况下,priority_queue按照元素的值从大到小进行排序,即最大元素位于队列的前面。priorityqueue的定义和结构如下(仅做了解即可)

在这里插入图片描述
在这里插入图片描述
top()中元素是队列中最大的 (默认大根堆)

小根堆
在这里插入图片描述
可以使用 greater
在这里插入图片描述

deque 双端队列

俩端都能进能出
在这里插入图片描述
常用函数

在这里插入图片描述

例题讲解 CLZ 银行问题

题目考点 : 队列

在这里插入图片描述
在这里插入图片描述
代码

#include <bits/stdc++.h>
#define Run 1
using namespace std;
queue<string> V, N;

void slove()
{
    string op;
    cin >> op;
    if (op == "IN")
    {
        string name, s;
        cin >> name >> s;
        if (s == "V")
        {
            V.push(name);
        }
        else
        {
            N.push(name);
        }
    }
    else
    {
        string s;
        cin >> s;
        if (s == "V")
            V.pop();
        else
            N.pop();
    }
}

template <typename T>
void print(T V)
{
    while (V.size())
    {
        cout << V.front() << "\n";
        V.pop();
    }
}

int main()
{
    cin.tie(0)->sync_with_stdio(0);
    cout.tie(0)->sync_with_stdio(0);
#if Run
    int _;
    cin >> _;
    while (_--)
        slove();
    print(V);
    print(N);
#else
    slove()
#endif
    return 0;
}

set

set 定义
在这里插入图片描述
set 内部实现使用红黑树
当插入重复元素set 会自动忽略

常用函数

在这里插入图片描述

修改set的方法

在这里插入图片描述
在这里插入图片描述

multiset 多重集合

与set区别 可以储存重复元素

在重复元素中删除一个元素

st.erase(st.find(x))

unordered_set 无序集合

底层使用哈希表实现
在这里插入图片描述

常用函数
在这里插入图片描述
find()返回迭代器

代码示例

set

在这里插入图片描述
在这里插入图片描述

multiset

在这里插入图片描述

unordered_set

在这里插入图片描述

map

基础

在这里插入图片描述
map 底层使用红黑树实现
map 主要是键值关系

常用函数

在这里插入图片描述

count 可以判断元素是否存在

multimap

可以有多个相同的键
在这里插入图片描述

常用函数

在这里插入图片描述

unordered_map

使用哈希函数
在这里插入图片描述
常用操作

在这里插入图片描述


学习时间:

  • 周一至周五晚上 7 点—晚上9点
  • 周六上午 9 点-上午 11 点
  • 周日下午 3 点-下午 6 点

学习产出:

  • 技术笔记 2 遍
  • CSDN 技术博客 3 篇
  • 习的 vlog 视频 1 个

在这里插入图片描述
🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~

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

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

相关文章

Python爬虫案例展示:实现花猫壁纸数据采集

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python 3.10 Pycharm 模块使用: import requests >>> pip install requests win R 输入cmd 输入安装命令 pip install requests 安装即…

Springboot各种请求参数详解

文章目录 请求Postman**为什么需要Postman****什么是Postman****Postman使用教程** 请求参数简单参数实体参数数组参数集合参数![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/eba0ca80e3724412ae4c79af72b859c3.png#pic_center)日期参数json参数路径参数总结 请求…

STM32CubeMX教程31 USB_DEVICE - HID外设_模拟键盘或鼠标

目录 1、准备材料 2、实验目标 3、模拟鼠标实验流程 3.0、前提知识 3.1、CubeMX相关配置 3.1.0、工程基本配置 3.1.1、时钟树配置 3.1.2、外设参数配置 3.1.3、外设中断配置 3.2、生成代码 3.2.0、配置Project Manager页面 3.2.1、设初始化调用流程 3.2.2、外设中…

ESP8266 控制之 : 使用 RingBuffer USART1 和 USART3互传

简介 使用Buffer来避免数据的丢失, 或许你自己在使用串口进行收发时会丢失数据, 现在我们就来简单使用一下RingBuffer创建Rx、Tx的Buffer来避免发送接收丢包或数据丢失问题。 扩展知识 RingBuffer的介绍, 看完大概也就知道了&#xff0c;实在不知道就看看下面的代码 线路连接…

详解操作系统各章大题汇总(死锁资源分配+银行家+进程的PV操作+实时调度+逻辑地址->物理地址+页面置换算法+磁盘调度算法)

文章目录 第三章&#xff1a;死锁资源分配图例一例二 第三章&#xff1a;银行家算法第四章&#xff1a;进程的同步与互斥做题步骤PV操作的代码小心容易和读者写者混 1.交通问题&#xff08;类似读者写者&#xff09;分析代码 2.缓冲区问题&#xff08;第二个缓冲区是复制缓冲区…

实现元素进入界面的平滑效果

先看效果&#xff1a; 实现思路&#xff1a;获取页面中需要加载动画的节点&#xff0c;用元素的animate()方法创建一个动画对象&#xff0c;并传入两个关键帧&#xff0c;接着使用IntersectionObserverAPI创建观察对象&#xff0c;用于观察元素进入页面。当元素进入界面时&…

【数据分享】1929-2023年全球站点的逐年平均气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01;本次我们为大家带来的就是具体到气象监…

CSS--Emmet 语法

Emmet语法的前身是Zen coding,它使用缩写,来提高html/css的编写速度, Vscode内部已经集成该语法. 目录 1. 快速生成HTML结构语法 1.1 快速生成HTML结构语法 2. 快速生成CSS样式语法 2.1 快速生成CSS样式语法 1. 快速生成HTML结构语法 1.1 快速生成HTML结构语法 1. 生成标…

2.【Vue3】Vue 基本使用——局部使用Vue

文章目录 1. 快速入门2. 常用指令2.1 v-for2.2 v-bind2.3 v-if 与 v-show2.4 v-on2.5 v-model 3. 生命周期4. Ajax 函数库 Axios4.1 Axios 基本使用4.2 Axios 请求方式别名 1. 快速入门 现在需要将 “hello vue3” 这样一个字符串渲染到页面上进行展示。 这个需求并不陌生&…

JVM系列——对象管理

JVM对象分布 对象头 第一类是用于存储对象自身的运行时数据&#xff0c;如哈希码&#xff08;HashCode&#xff09;、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等 另外一部分是类型指针&#xff0c;即对象指向它的类型元数据的指针&#xff0c;Java 虚…

【ArcGIS微课1000例】0096:dem三维块状表达(层次地形模型)

文章目录 一、DEM表达方式二、层次模型表达三、注意事项一、DEM表达方式 DEM数字高程模型的表达方式通常有以下4种: 1. 规则格网 2. 不规则三角网 3. 等高线 4. 层次地形模型 作为栅格地理数据,DEM 数据具有2.5维的特征,能够以三维表面的形式进行三维空间表达。但受其数…

Web 开发 6:Redis 缓存(Flask项目使用Redis并同时部署到Docker详细流程 附项目源码)

大家好&#xff01;欢迎来到第六篇 Web 开发教程&#xff0c;今天我们将探讨一个非常重要的话题&#xff1a;Redis 缓存。作为一个互联网开发者&#xff0c;你一定知道在处理大量请求时&#xff0c;性能优化是至关重要的。而 Redis 缓存正是帮助我们提升系统性能的利器。Redis …

爬虫基础-计算机网络协议

一个数据的传输 这些设备的数据转发是通过协议来完成的&#xff0c;整个互联网可以说是完全由网络协议来维持的 不同的协议分工不同&#xff0c;比如ip协议确保了ip寻址&#xff0c;tcp协议确保了数据完整性 IP地址和URL ip地址 整个网络传输可以比作快递&#xff0c;数据就…

2023年度总结——忙忙碌碌,终有归章

思来想去&#xff0c;还是决定写一篇年终总结&#xff0c;一来算是对23年的一年的回顾&#xff0c;二来是对24年的展望。记得22年也写过一篇年度总结&#xff0c;题目是《2022年度总结——一切都在慢慢变好》。今年&#xff0c;我想起的题目是《2023年度总结——忙忙碌碌&#…

在Temu跨境电商平台上,如何快速出单?

随着越来越多的商家选择入驻Temu跨境电商平台&#xff0c;一旦入驻申请通过&#xff0c;商家就可以开始上架商品并等待订单的产生。然而&#xff0c;很多新手跨境电商卖家都面临一个共同的问题&#xff0c;那就是&#xff1a;Temu出单快吗&#xff1f;Temu上架多久能出单&#…

STM32CubeMX教程27 SDIO - 读写SD卡

目录 1、准备材料 2、实验目标 3、轮询方式读取SD卡流程 3.0、前提知识 3.1、CubeMX相关配置 3.1.0、工程基本配置 3.1.1、时钟树配置 3.1.2、外设参数配置 3.1.3、外设中断配置 3.2、生成代码 3.2.0、配置Project Manager页面 3.2.1、外设初始化调用流程 3.2.2、外设中断调用流…

激光雷达,角力「降本增效」

高工智能汽车研究院最新发布的数据显示&#xff0c;2023年1-11月&#xff0c;中国市场&#xff08;不含进出口&#xff09;乘用车前装标配激光雷达搭载量为46.48万颗&#xff0c;同比增长372.35%&#xff0c;继续保持高增长态势。 随着激光雷达在中国市场完成规模化上量的节点&…

Promethues是什么?

什么是Prometheus&#xff1f; Prometheus是一个开源的系统监控以及报警系统。整和zabbix的功能&#xff0c;系统&#xff0c;网络&#xff0c;设备。 promethues可以兼容网络、设备、容器监控、告警系统。因为和k8s是一个项目基金开发的产品&#xff0c;天生就匹配k8s的原生…

离线安装nginx_银河麒麟系统_nginx报错_503_500 Internal Server Error----nginx工作笔记007

如果报这个错误,意思就是,对于nginx.conf文件中指定的,文件夹没有权限 那么这个是去给对应的文件夹赋权限: chmod 777 /opt/module/test_web 就可以了,然后再去访问就不会报错了,还有 503的错误都可以这样解决 然后关于离线安装nginx,尝试了一下如果把之前安装过的nginx,直接…

AI-数学-高中-10-2-分数指数幂计算

原作者视频&#xff1a;初等函数】2分数指数幂的计算&#xff08;基础&#xff09;_哔哩哔哩_bilibili 方法1&#xff1a; 方法2&#xff1a;