c++ -- STL

news2024/9/27 15:24:18

【C/C++】STL详解_c++stl_沉晓的博客-CSDN博客

Learning Record

have done

assignment

class template

An excellent programmer only needs to know how to use containers to improve program encapsulation and reduce coupling, without understanding the underlying principles

Deque

在C++中,deque(双端队列)是一种容器,支持在两端进行高效地插入和删除操作。以下是deque常用的操作:

  1. 头部和尾部元素操作:

    • push_front(element): 在deque的头部插入一个元素。
    • push_back(element): 在deque的尾部插入一个元素。
    • pop_front(): 移除deque的头部元素。
    • pop_back(): 移除deque的尾部元素。
    • front(): 返回deque的头部元素的引用。
    • back(): 返回deque的尾部元素的引用。
  2. 迭代器操作:

    • begin(): 返回指向deque的第一个元素的迭代器。
    • end(): 返回指向deque的最后一个元素之后位置的迭代器。
    • rbegin(): 返回指向deque的最后一个元素的逆向迭代器(反向迭代器)。
    • rend(): 返回指向deque的第一个元素之前位置的逆向迭代器。
  3. 容量操作:

    • size(): 返回deque中元素的个数。
    • empty(): 检查deque是否为空。
    • resize(new_size): 改变deque的大小,如果new_size比当前大小小,则删除末尾元素;如果new_size比当前大小大,则在末尾插入默认构造的元素。
    • max_size(): 返回deque能够容纳的最大元素数量。
  4. 访问元素操作:

    • at(index): 返回指定索引处的元素的引用,带有边界检查。
    • operator[](index): 访问指定索引处的元素的引用,不进行边界检查。
    • front(): 返回deque的头部元素的引用。
    • back(): 返回deque的尾部元素的引用。
  5. 清空和删除操作:

    • clear(): 移除deque中的所有元素,使其为空。
    • erase(position): 移除指定位置处的元素。
    • erase(first, last): 移除指定范围内的元素。
    • remove(value): 移除deque中所有等于给定值的元素。

这些是deque常用的操作,可以根据需要选择合适的操作来操作deque容器。

SET

  1. 插入操作:

    • insert(value): 将一个元素插入set中。
    • insert(first, last): 将一个范围内的元素插入set中。
    • emplace(args...): 在set中构造一个元素。
    • emplace_hint(hint, args...): 在给定提示位置处构造一个元素。
  2. 删除操作:

    • erase(value): 从set中移除一个元素。
    • erase(iterator): 从set中移除给定迭代器指向的元素。
    • erase(first, last): 移除一个范围内的元素。
    • clear(): 清空set中的所有元素。
  3. 查找操作:

    • find(value): 查找一个特定的元素,并返回一个迭代器指向它。
    • count(value): 返回set中等于给定值的元素的数量(因为set中元素是唯一的,所以结果要么是0,要么是1)。
    • lower_bound(value): 返回一个迭代器指向第一个不小于给定值的元素。
    • upper_bound(value): 返回一个迭代器指向第一个大于给定值的元素。
    • equal_range(value): 返回一个pair对象,包含lower_bound和upper_bound的结果。
  4. 容量操作:

    • size(): 返回set中元素的数量。
    • empty(): 检查set是否为空。
  5. 迭代器操作:

    • begin(): 返回指向set中第一个元素的迭代器。
    • end(): 返回指向set中最后一个元素之后位置的迭代器。
    • rbegin(): 返回指向set中最后一个元素的逆向迭代器(反向迭代器)。
    • rend(): 返回指向set中第一个元素之前位置的逆向迭代器。

std::set还支持自动排序和去重的特性,确保元素始终按照升序排列,并且不允许重复元素存在。

这些是std::set常用的操作,可以根据需要选择合适的操作来操作set容器。

MAP

在C++中,std::map是一种关联容器,它以键-值对(key-value pair)的形式存储元素,并根据键进行排序和访问。以下是std::map常用的操作:

  1. 插入操作:

    • insert({key, value}): 插入一个键-值对到map中。
    • insert(make_pair(key, value)): 插入一个键-值对到map中。
    • emplace(key, args...): 在map中构造一个键-值对。
    • emplace_hint(hint, key, args...): 在给定提示位置处构造一个键-值对。
  2. 删除操作:

    • erase(key): 移除指定键的键-值对。
    • erase(iterator): 移除给定迭代器指向的键-值对。
    • erase(first, last): 移除一个范围内的键-值对。
    • clear(): 清空map中的所有键-值对。
  3. 查找操作:

    • find(key): 查找一个特定的键,并返回一个迭代器指向它。
    • count(key): 返回map中具有给定键的键-值对的数量(因为map中键是唯一的,所以结果要么是0,要么是1)。
    • lower_bound(key): 返回一个迭代器指向第一个不小于给定键的键-值对。
    • upper_bound(key): 返回一个迭代器指向第一个大于给定键的键-值对。
    • equal_range(key): 返回一个pair对象,包含lower_bound和upper_bound的结果。
  4. 访问操作:

    • at(key): 返回具有给定键的值的引用,如果键不存在,会抛出std::out_of_range异常。
    • operator[](key): 访问具有给定键的值的引用,如果键不存在,则插入一个具有默认值的键-值对并返回该值的引用。
  5. 容量操作:

    • size(): 返回map中键-值对的数量。
    • empty(): 检查map是否为空。
  6. 迭代器操作:

    • begin(): 返回指向map中第一个键-值对的迭代器。
    • end(): 返回指向map中最后一个键-值对之后位置的迭代器。
    • rbegin(): 返回指向map中最后一个键-值对的逆向迭代器(反向迭代器)。
    • rend(): 返回指向map中第一个键-值对之前位置的逆向迭代器。

std::map以键进行排序,所以键的类型需要支持比较操作(或通过提供自定义比较函数对象来进行比较)。键是唯一的,每个键只能关联一个值。

这些是std::map常用的操作,可以根据需要选择合适的操作来操作map容器。

PAIR

在C++中,std::pair是一个模板类,用于存储两个值的有序对。std::pair常用于返回多个值或将多个值组合在一起。以下是std::pair的常用操作:

  1. 构造函数和赋值操作符:

    • pair<T1, T2> p: 创建一个名为pstd::pair对象,其中T1T2分别是第一个值和第二个值的类型,默认构造这两个值。
    • pair<T1, T2> p(value1, value2): 创建一个名为pstd::pair对象,并用value1value2初始化第一个值和第二个值。
    • p1 = p2: 将一个std::pair对象赋值给另一个std::pair对象。
  2. 成员变量:

    • p.first: 访问std::pair对象的第一个值。
    • p.second: 访问std::pair对象的第二个值。
  3. 比较操作:

    • p1 == p2: 比较两个std::pair对象是否相等,即第一个值和第二个值都相等。
    • p1 != p2: 比较两个std::pair对象是否不相等。
    • p1 < p2: 按字典序比较两个std::pair对象。首先比较第一个值,如果第一个值相等,则比较第二个值。
  4. 交换操作:

    • swap(p1, p2): 交换两个std::pair对象的值。

std::pair提供了一种方便的方式来组合和操作两个值。它在许多标准库的函数和算法中被广泛使用,例如std::mapstd::unordered_map等容器,以及在返回多个值的情况下。 

Leecode/LOGO

239. 滑动窗口最大值 - 力扣(Leetcode)

优先级队列---虽然运行超时了 但是用例都通过了 菜鸡还是很开心的

 

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        int n = nums.size(); // 先计算数组长度
        vector<int> ans;     // 接收结果

        priority_queue<pair<int,int>> ret;

        for(int i = 0; i < k; i++){ // 对于前k个元素
            ret.push(make_pair(nums[i],i));
        }

        ans.push_back(ret.top().first);

        for(int i = k; i < n; i++){
            while(ret.top().second <= i-k){
                ret.pop();
            }
            ret.push(make_pair(nums[i],i));
            ans.push_back(ret.top().first);
        }
        return ans;
    }
};

双端队列

 

 

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

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

相关文章

面向对象之创建对象模式和继承模式

目录 工厂函数模式 优点&#xff1a; 缺点&#xff1a; 构造函数模式 优点: 缺点: 原型对象模式 优点: 缺点: 组合模式 instanceof 继承 继承分为三类&#xff0c;分别是:原型链继承、借用构造函数继承、组合继承(原型链继承借用构造函数继承) 组合继承 从…

开发工具VSCODE的使用记录

vscode简介 Visual Studio Code&#xff08;简称“VS Code” [1] &#xff09;是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的&#xff0c;针对于编写现代Web和云应用的跨平台源代码编辑器&#xff0c; [2] 可在桌面上运行…

ADB 命令结合 monkey 的简单使用,超详细

一&#xff1a;ADB简介 1&#xff0c;什么是adb&#xff1a; ADB 全称为 Android Debug Bridge&#xff0c;起到调试桥的作用&#xff0c;是一个客户端-服务器端程序。其中客户端是用来操作的电脑&#xff0c;服务端是 Android 设备。ADB 也是 Android SDK 中的一个工具&#…

openssl CVE-2016-2107 漏洞检测---OpenSSL Padding Oracle 攻击

openssl CVE-2016-2107 漏洞检测—OpenSSL Padding Oracle 攻击 文章目录 CVE-2016-2107.exe执行1执行2 OpenSSL Padding Oracle 攻击漏洞描述检测方法修复 CVE-2016-2107.exe 执行1 下载CVE-2016-2107.exe https://github.com/FiloSottile/CVE-2016-2107 https://github.com…

2023 7.3~7.9 周报 (论文初读)

上周回顾: (上周还没开始) 本周计划: 本周阅读论文《Deep-Learning Full-Waveform Inversion Using Seismic Migration Images》. 这篇论文是发表于2022的一篇较新的关于DL-FWI的论文, 作者在论文中提出了一些比较新颖的观点和质疑. 这篇论文主基调很符合近几年DL-FWI的味道…

对 MinIO API 进行封装并上传到第三方库 Pyzjr

目录 本文介绍 上一节补充 使用官方的游乐场进行测试和开发 熟悉MinIO的API 创建客户端 操作桶 1、检查桶是否存在&#xff0c;如果不存在就创建一个桶 2、列出所有的存储桶名 3、删除储存桶 4、用于查看存储桶的对象 操作对象 1、删除对象 2、删除zip文件 3、下…

C#基础学习_构造方法

C#基础学习_构造方法 在构造方法中添加初始化内容; 通过使用构造方法,可以简化对象初始化代码。 无参数的构造方法: public Student(){StudentID = 12345;StudentName = "djichsdi";}带参数的构造方法(构造方法同样可以重载&

Python——基础语法

输出语句 #字符串拼接 print("hello word""北岭山脚鼠鼠") #字符转义 print("He said \"Let\s go!\"") #换行 print("hello!\nHi!") #三引号 print(""""北岭山脚鼠鼠 北岭山脚鼠鼠 北岭山脚鼠鼠 北岭山…

ESP32(掌控板) 陀螺仪显示与RGB灯

ESP32&#xff08;掌控板&#xff09; 陀螺仪显示与RGB灯 本程序图形化显示陀螺仪位置&#xff08;注意要换算&#xff09;&#xff0c;根据陀螺仪位置控制RGB灯颜色并有3种颜色组合和关灯可选&#xff0c;通过触摸按键调节亮度。 图形化程序如下 Arduino代码如下 /*!* MindP…

字符集,编码方式和Java程序乱码问题

目录 1&#xff0c;字符编码 2&#xff0c;三大字符集及编码方式 2.1&#xff0c;ASCII字符集及编码方式 2.2&#xff0c;GBK字符集及编码方式 2.3&#xff0c;Unicode字符集及编码方式 3.程序乱码问题 1&#xff0c;字符编码 数字计算机中的存储器唯一可以存储的是比特&a…

绿虫生产效率提升工具怎么安装配置?

一、添加员工 打开绿虫生产效率提升工具后台&#xff0c;输入账号密码登录&#xff0c;登录成功之后&#xff0c;需要先进行员工添加&#xff0c;点击员工管理&#xff0c;导入员工信息&#xff0c;也可使用企微同步。 二、绑定员工 点击终端部署&#xff0c;复制网址或下载安…

多模态系列论文----最详细的多模态论文总结(BLIP、BEIT、CoCa等)

1 多模态概述 多模态指的是多种模态的信息数据&#xff0c;包括&#xff1a;文本、图像、视频、音频等。多模态任务是指需要同时处理两种或多种不同类型的数据的任务。近年来&#xff0c;随着深度学习技术的发展&#xff0c;多模态任务取得了显著的进步。特别是VIT&#xff08…

【WebSocket】SpringBoot整合WebSocket实现聊天室(一)

目录 一、准备 1、引入依赖 2、创建配置类 二、相关注解 一、准备 1、引入依赖 首先我们需要在项目中引入依赖&#xff0c;有两种方式。第一种我们可以在创建Spring Boot项目时搜索WebSocket然后勾选依赖 第二种是我们可以直接在项目的pom.xml文件中插入以下依赖 <dep…

基于TF-IDF+Tensorflow+PyQt+孪生神经网络的智能聊天机器人(深度学习)含全部Python工程源码及模型+训练数据集

目录 前言总体设计系统整体结构图系统流程图孪生神经网络结构图 运行环境Python 环境TensorFlow 环境 模块实现1. 数据预处理2. 创建模型并编译3. 模型训练及保存4. 模型应用 系统测试1. 训练准确率2. 测试效果3. 模型生成 工程源代码下载其它资料下载 前言 本项目利用TF-IDF&…

[VUE学习】从头搭建权限管理系统前端-初始化

1.安装Node 2.安装Vue Cli vue的一个脚手架 npm install -g vue/cli 3.vue ui搭建vue项目 cmd 运行 vue ui 然后创建新项目 选择npm 选择配置 Babel 是编译的 Router 是路由 vuex 是状态保存的 Linter/fomatter 代码检测和格式化 创建完成 这个时候 代码在我们本地…

Spring Boot 中的 Criteria 是什么,如何使用?

Spring Boot 中的 Criteria 是什么&#xff0c;如何使用&#xff1f; 介绍 Spring Boot 是一个流行的 Java Web 开发框架&#xff0c;它提供了一些强大的工具和库&#xff0c;使得开发 Web 应用程序变得更加容易。其中之一是 Criteria API&#xff0c;它提供了一种类型安全的…

电脑免费简单又好用的记事本app软件推荐

很多职场人士在办公时都需要用到电脑&#xff0c;在电脑上有很多好用的工具软件可以用来辅助工作的展开&#xff0c;其中记事本类的App就有不少优质软件存在。那电脑免费简单又好用的记事本app软件推荐哪些呢&#xff1f;这里小编就以自己的Windows10电脑为例&#xff0c;为大家…

山西电力市场日前价格预测【2023-07-09】

日前价格预测 预测明日&#xff08;2023-07-09&#xff09;山西电力市场全天平均日前电价为386.09元/MWh。其中&#xff0c;最高日前价格为505.65元/MWh&#xff0c;预计出现在21: 30。最低日前电价为286.38元/MWh&#xff0c;预计出现在13: 30。 以上预测仅供学习参考&#x…

ModaHub魔搭社区:向量数据库Zilliz Cloud向量搜索和查询教程(一)

目录 概述 开始前 单向量搜索 本文介绍如何在 Zilliz Cloud 中执行近似最近邻&#xff08;Approximate Nearest Neighbour&#xff0c;ANN&#xff09;搜索和查询。搜索是指在 Collection 中查找与指定查询向量最接近的向量&#xff0c;查询是基于指定条件筛选出满足条件的数…

一文看懂ChatGPT与存算一体化

ChatGPT开启大模型“军备赛”&#xff0c;存储作为计算机重要组成部分明显受益: ChatGPT开启算力军备赛&#xff0c;大模型参数呈现指数规模&#xff0c;引爆海量算力需求&#xff0c;模型计算量增长速度远超人工智能硬件算力增长速度&#xff0c;同时也对数据传输速度提出了…