当前位置: 首页 > news >正文

c++ -- STL

【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;}
};

双端队列

 

 

相关文章:

c++ -- STL

【C/C】STL详解_cstl_沉晓的博客-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 pri…...

文字识别(OCR)介绍与开源方案对比

目录 文字识别&#xff08;OCR&#xff09;介绍与开源方案对比 一、OCR是什么 二、OCR基本原理说明 三、OCR基本实现流程 四、OCR开源项目调研 1、tesseract 2、PaddleOC 3、EasyOCR 4、chineseocr 5、chineseocr_lite 6、cnocr 7、商业付费OCR 1&#xff09;腾讯…...

Modbus tcp转ETHERCAT在Modbus软件中的配置方法

Modbus tcp和ETHERCAT是两种不同的协议&#xff0c;这给工业生产带来了很大的麻烦&#xff0c;因为这两种设备之间无法通讯。但是&#xff0c;远创智控YC-ECT-TCP网关的出现&#xff0c;却为这个难题提供了解决方案。 YC-ECT-TCP网关能够连接到Modbus tcp总线和ETHERCAT总线中…...

开源点云数据集整理汇总

目录 一、ModelNet401. 网址2. 模型 二、ShapeNet1. 网址2. 模型 三、S3DIS Dataset1. 网址2. 模型 四、ScanNet1. 网址2. 模型 五、RGB-D Object Dataset1. 网址2. 模型 六、 NYU Depth Dataset V2 &#xff08;纽约大学深度数据集&#xff09;1. 网址2. 模型 七、 The Stanfo…...

【全栈开发指南】VUE前端路由设计及配置

我们在使用Vue.js时&#xff0c;创建单页面应用一定会用到路由&#xff0c;Vue Router 是 Vue.js 官方的路由管理器&#xff0c;我们在开发框架中过程中&#xff0c;需要结合Vue Router路由管理器提供的功能&#xff0c;设计和实现系统中菜单的配置。 一、实现原理 一级菜单r…...

C语言程序环境和预处理

本章主要以图片和文字的形式给大家讲解 程序的翻译环境和程序的执行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境&#xff0c;它用于实际执行代码 2. 详解编译…...

为摸鱼助力:一份Vue3的生成式ElementPlus表单组件

目录 一、实现背景 二、简介 三、组织架构设计 四、实现方式 五、代码示例 六、示例代码效果预览 七、项目预览地址 & 项目源码地址 目前项目还有诸多待完善的地方&#xff0c;大家有好的想法、建议、意见等欢迎再次评论&#xff0c;或于github提交Issues 一、实现…...

数通工作中常见问题与解决方法

城域网&#xff0c;硬件&#xff0c;交换机开局 1、环路产生&#xff0c;现象&#xff0c;怎么解决 一般是物理拓扑存在环路&#xff0c;导致数据互传&#xff0c;Mac地址漂移&#xff0c;产生环路&#xff1b; Cpu利用率变高&#xff0c;端口流量接近100%&#xff0c;有mac…...

基于STM32+华为云IOT设计的智能浇花系统

一、前言 随着社会的不断发展和人们生活水平的逐渐提高,人们逐渐追求高质量的生活,很多人都会选择在家里或办公室种植一些花卉以净化家庭空气,陶冶情操,但是很多人忙于工作、学习、出差、旅游或者一些其他的原因,不能及时地对花卉进行照料,短时间内导致很多花卉因缺水分…...

回调函数(callback)是什么?

通俗易懂 你到一个商店买东西&#xff0c;刚好你要的东西没有货&#xff0c;于是你在店员那里留下了你的电话&#xff0c;过了几天店里有货了&#xff0c;店员就打了你的电话&#xff0c;然后你接到电话后就到店里去取了货。 在这个例子里&#xff0c;你的电话号码就叫回调函…...

零代码量化投资:用ChatGPT获取新浪财经上的股票实时行情

现在很多免费的股票数据库&#xff0c;比如akshare&#xff0c;其实是从新浪财经或者东方财富网站上爬取下来的。如果能直接从新浪财经或者东方财富网站上爬取数据&#xff0c;可以获取更全面更即时的信息。 可以在ChatGPT中输入提示词如下&#xff1a; 写一段Python代码&…...

从GitLab拉取并运行项目

从GitLab拉取并运行项目 序Git项目运行运行报错 总结教训 序 搭建好前端基础环境后&#xff0c;开始尝试从单位项目组拉取项目尝试本地运行。 Git Git相关配置&#xff1a;一篇学会Git版本管理 先申请Git账号&#xff0c;随后由上级分配权限拉入该项目组。 通过git clone ……...

AI绘画结合GPT 把Ai绘画与摄影玩明白

一、绘画与摄影有什么关系&#xff1f; 绘画和摄影是两种不同的艺术形式&#xff0c;它们都以其自身独特的方式捕捉和表达现实。在某些方面&#xff0c;它们是相互联系的&#xff0c;而在其他方面&#xff0c;它们又有所不同。​ 相似之处&#xff1a;绘画和摄影都是创造性的…...

哈工大计算机网络课程数据链路层协议详解之:多路访问控制(MAC)协议

哈工大计算机网络课程数据链路层协议详解之&#xff1a;多路访问控制&#xff08;MAC&#xff09;协议 在上一小节介绍完数据链路层功能和所提供的服务后&#xff0c;接下来我们介绍一个在数据链路层非常重要的一个协议&#xff1a;多路访问控制MAC协议。 多路访问控制主要是…...

docker基本概念和相关命令

!!! 前面都是概念东西&#xff0c;可以直接跳到Docker命令就可以了(直接搜吧“Docker命令”&#xff0c;页内无法跳转&#xff0c;还在研究中……) 容器和虚拟化 容器包含应用和其所有的依赖包&#xff0c;但是与其他容器共享内核。容器在宿主机操作系统中&#xff0c;在用户…...

43. 间断连续登录用户问题

文章目录 题目需求思路一实现一题目来源 题目需求 现有各用户的登录记录表&#xff08;login_events&#xff09;如下&#xff0c;表中每行数据为&#xff1a;一个用户何时登录了平台。 现要求统计各用户最长的连续登录天数&#xff0c;间断一天也算作连续&#xff0c;例如&a…...

Visual Studio Code 编辑器实用插件简介

Visual Studio Code 编辑器插件 以下是一些常用的 Visual Studio Code 编辑器插件及其简短描述&#xff1a; 2gua.rainbow-brackets&#xff1a;在括号周围添加彩虹色的边框&#xff0c;以帮助区分不同层次的括号。adpyke.codesnap&#xff1a;将代码片段转换为漂亮的图片&am…...

微信小程序之Image那些事

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、使用场景二、使用方式1.动态读取image大小2.动态设置style3.动态赋值 总结 前言 小程序中 Image使用频率是非常高的 不同场景下 Image使用的属性也不一样 …...

【MySQL】不就是子查询

前言 今天我们来学习多表查询的下一个模块——子查询&#xff0c;子查询包括了标量子查询、列子查询、行子查询、表子查询&#xff0c;话不多说我们开始学习。 目录 前言 目录 一、子查询 1. 子查询的概念 2. 子查询语法格式 2.1 根据子查询结果不同可以分为&#xff1a;…...

gpt4实现对摄像头帧缓冲区图像的LAB阈值选择界面(python-opencv)

代码全是GPT4写的&#xff0c;我就提出Prompt和要改的地方而已。 图形界面效果 可复制阈值&#xff1a;(xxx, xxx, xxx, xxx, xxx, xxx) 代码 import cv2 import numpy as np import time from tkinter import * from PIL import Image, ImageTk import pyperclip # new# G…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...