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

学习目标:

博主介绍: 27dCnc
专题 : 算法题入门

☆*: .。. o(≧▽≦)o .。.:*☆

主题: C++ 基础语法

今日份打卡

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第1张图片

  • 蓝桥杯基础语法

学习内容:

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

内容详细 :

小明和完美序列

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

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第2张图片

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

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

代码 :

#include
#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;
}

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第3张图片

顺子日期

题目考点 : 模拟 思维

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第4张图片

代码

#include
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();
}

注释
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第5张图片

STL

pair

pair位于
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第6张图片

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

piar实例
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第7张图片
以上代码创建了两个pair对象,分别包含不同类型的值。然后,通过访问first和second成员变量,输出了这些值

pair嵌套

pair可以进行嵌套,也就是说可以将一个pair对象作为另一个pair对象的成员通过嵌套pair,你可以方便地组合多个值,并形成更复杂的数据结构。例如,你可以创建一个三维坐标系的点,其中第1个维度由一个整数表示,第2、3个维度由一个pair表示。
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第8张图片

pair自带的排序规则

pair自带的排序规则是按照first成员进行升序排序。如果first成员相等,则按照second成员进行升序排序,这意味着当你使用标准库中的排序算法(如std::sort)又对包含pair对象的容器进行排序时会根据pair对象的first成员进行排序。
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第9张图片

可以自定义比较函数

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第10张图片
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第11张图片

vector

vector定义和特性
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第12张图片

其中 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 为非空
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第13张图片

vector排序去重

排序
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第14张图片
去重

unique() 将重复元素移动到元素末尾
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第15张图片

代码示例

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第16张图片

运行结果
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第17张图片

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第18张图片
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第19张图片

经典去重语句

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

list(双向链表容器)

定义和结构
ist的使用频率不高,在做题时几乎遇不到需要使用list的情景。
list是一种双向链表容器,它是标准模板库(STL)提供的一种序列容器。1ist容器以节点(node)的形式存储元素,并使用指针将这些节点链接在一起,形成一个链表结构。list容器结构如下:
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第20张图片
具有双向性 : 有 prevnext
内存地址不连续,插入删除元素不导致元素移动

示例
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第21张图片
访问查找为 O ( n ) O(n) O(n)
查找为 O ( 1 ) O(1) O(1)

list常用函数

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第22张图片

stack

stack 的定义和结构

stack是一种后进先出(LIFO)的数据结构,使用前需要包含头文件stack提供了一组函数来操作和访问元素,但它的功能相对较简单。stack的定义和结构如下(仅作了解即可):
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第23张图片

结构

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第24张图片
stack 只能对栈顶元素进行操作

stack 的常用函数

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第25张图片

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

代码示例
top() 会获取栈顶元素不弹出元素
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第26张图片

queue

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第27张图片
与日常生活中的排队类似

prority_queue 优先队列 (堆 理论)

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

在这里插入图片描述
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第28张图片
top()中元素是队列中最大的 (默认大根堆)

小根堆
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第29张图片
可以使用 greater
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第30张图片

deque 双端队列

俩端都能进能出
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第31张图片
常用函数

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第32张图片

例题讲解 CLZ 银行问题

题目考点 : 队列

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第33张图片
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第34张图片
代码

#include 
#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 定义
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第35张图片
set 内部实现使用红黑树
当插入重复元素set 会自动忽略

常用函数

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第36张图片

修改set的方法

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第37张图片
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第38张图片

multiset 多重集合

与set区别 可以储存重复元素
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第39张图片
在重复元素中删除一个元素

st.erase(st.find(x))

unordered_set 无序集合

底层使用哈希表实现
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第40张图片

常用函数
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第41张图片
find()返回迭代器

代码示例

set

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第42张图片
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第43张图片

multiset

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第44张图片

unordered_set

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第45张图片

map

基础

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第46张图片
map 底层使用红黑树实现
map 主要是键值关系

常用函数

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第47张图片

count 可以判断元素是否存在

multimap

可以有多个相同的键
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第48张图片

常用函数

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第49张图片

unordered_map

使用哈希函数
蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第50张图片
常用操作

蓝桥杯训练|基础语言Day1 - STL pair vector list stack queue set map容器_第51张图片


学习时间:

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

学习产出:

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


如果此文对你有帮助的话,欢迎关注、点赞、⭐收藏、✍️评论,支持一下博主~

你可能感兴趣的:(算法入门,蓝桥杯,c++,list,数据结构,笔记)