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

C++STL语法速记

C++STL语法速记

文章目录

  • C++STL语法速记
    • 前言
    • vector
    • string
    • queue
    • priority_queue
    • stack
    • deque
    • set,map,multiset、multimap
    • unordered_set、unordered_map、unordered_multiset、unordered_multimap
    • 参考博客

前言

笔者最近开始重刷算法题,鉴于C++语法的便利,笔者决定简单学习其语法用作写算法题的一个工具,这里不会涉及有关C++底层的内容,大多是一些容器的语法记录。

vector

这个是C++中非常常用的一个语法工具,也就是OC中的一个可变数组,下面笔者简单介绍一下他的一个用法。

  • 创建方式:
vector<int> num(10, 1) //vector<数据类型> 变量名(数组大小,数组初始化时每个元素的默认值)
//这里也就是创建一个数组,初始化时设置数组内的每一个元素的值为1
  • 返回空数组:
return {} // C11的一个标准返回
  • 常用的方法:
num.size() // 返回一个大小
num.empty() // 判断是否为空
num.clear() // 清空容器,让他大小为0
num.front() //第一个元素
num.back() //最后一个元素
num.push_back() // 给容器最末位置添加一个元素
num.pop_back() //删除最后一个元素
num.lower_bound(a.begin(), a.end(), x)/upper_bound(a.begin(), a.end(), x) //返回大于等于x的最小的数的迭代器/返回大于x的最小的数的迭代器。
//注意:以上size()/empty()两个接口在本文章所介绍到的容器中都有着相同的接口,且时间复杂度均为O(1),以下不再赘述。

string

c++的字符串拼接有语法🍬:可以用加法来拼接。

  • 常用方法:
num.substr(start, Length) //返回的是字符串的子串,第一个参数start为子串在原字符串中的起始位置,第二个参数Length为子串的长度,特殊的,如果Length十分大,超过原串的最后一个字符,则返回到最后一个字符为止,省略第二个参数也是返回到最后一个字符为止。实质上就是c的字符串切割函数
num.c_str() //用于输出字符串的首元素的地址
num.length() // 返回长度
num.size() // 返回长度
num.push_back() //给最后的位置添加数据
num.pop_back() //移除最后的一个元素
num.erase(p, n) //移除从p为索引开始的包括p的长度为n的连续字符
num.find(c) //找到a中字符c第一次出现的一个下标,如果没有就返回-1

queue

C++封装了一个队列

  • 创建方式
queue<元素类型> 队列名
queue<int> que //使用前记得导入头文件#include <queue>
  • 常用方法
num.push() //入队
num.pop() // 出队
num.back() // 返回队尾元素
num.pop() //弹出队首元素

priority_queue

C++实现并封装了优先队列,也就是堆,默认是大根堆,下面介绍相关接口的用法以及定义方式。

  • 常用方法
que.push() // 向堆中插入一个元素。
que.top() // 返回堆顶元素。
que.pop() // 弹出堆顶元素。

定义小根堆也就是插入对应的一个负值。(直接利用了大根堆的一个特性)

stack

C++分装了一个栈:

 stack<int> stack
  • 常用方法:
push() //推入栈
pop() //出栈
top() //返回栈顶元素

deque

这里其实就是一个双端队列,支持在头位置和尾位置进行一个增删改查

  • 常用方法:
clear() //清空元素
front() //返回队列头位置元素
back() //返回最后一个位置的元素
push_back()||pop_back() //在尾增删元素
pop_front()||push_front() // 在队首位置增删元素
begin()|end() //支持迭代器
  

set,map,multiset、multimap

基于平衡二叉树(红黑树)实现,动态的维护一组有序序列
注意:含有multi前缀的容器里,元素可以重复出现。
涉及到增删改查的操作时间复杂度绝大部分是O(logn)级别的

  • 常用方法:
//set和multiset的常用接口:

insert() //插入一个数。
find() //查找一个数,没找到时返回end()的值。
count() //返回一个数出现的次数。
erase() //①输入一个数x,删除所有的x,时间复杂度O(k+logn);②输入一个迭代器,删除这个迭代器。
s.lower_bound(x)/s.upper_bound(x) //返回大于等于x的最小的数的迭代器/返回大于x的最小的数的迭代器。
  
//map和multimap的常用接口:

insert() //插入的数据类型为pair。
erase() //输入的参数类型为pair()或迭代器。
find() //查找一个数,不存在时返回end()的值。
//map支持[]访问,multimap由于可以存在键相同的pair,故不支持[]访问 。 其实就和OC里的字典一样
lower_bound()/upper_bound() //返回大于等于x的最小的数的迭代器/返回大于x的最小的数的迭代器。

unordered_set、unordered_map、unordered_multiset、unordered_multimap

基于哈希表实现的容器,内部是无序的。
注意:含有multi前缀的容器里,元素可以重复出现。
所涉及的基本操作的时间复杂度基本上是O(1)级别的。

这里的大部分功能都比前面介绍的大致类似,这里笔者就不多赘述了,其实也就是一个map。

这里笔者引用一段话来介绍一下这里的两者的一个底层区别,方便我们在不同的情况采用不同的一个数据结构

  • map: map内部实现了一个红黑树,该结构具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素,因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行这样的操作,故红黑树的效率决定了map的效率。
  • unordered_map: unordered_map内部实现了一个哈希表,因此其元素的排列顺序是杂乱的,无序的

image-20250413191117087

所以如果有顺序要求的话我们呢就采用map,否则就采用unorderer_map。

参考博客

  • C++语法速记

相关文章:

  • P5738 【深基7.例4】歌唱比赛
  • 【源码】SpringMvc源码分析
  • [Dify] 基于明道云实现金融业务中的Confirmation生成功能
  • d202548
  • 库magnet使用指南
  • 少儿编程 scratch四级真题 2025年3月电子学会图形化编程等级考试Scratch四级真题解析(选择题)
  • SQLite-Web:一个轻量级的SQLite数据库管理工具
  • 智慧乡村数字化农业全产业链服务平台建设方案PPT(99页)
  • MATLAB2022b安装
  • 文件操作和 IO - 3
  • HTTP:五.WEB服务器
  • 纯虚函数(Pure Virtual Function)详解
  • 笔试专题(九)
  • Android 系统的进程保活方案的一些思路
  • nmcli创建wpa-psk2 wifi热点
  • 2.0 全栈运维管理:Linux网络基础核心概念解析、Proxmox网络组件详解、虚拟化网络模型分类
  • AI 课招生啦
  • 英语单词 list 11
  • IPV6应用最后的钥匙:DDNS-GO 动态域名解析工具上手指南--家庭云计算专家
  • Vue3+elementPlus中 树形控件封装
  • 达恩当选罗马尼亚总统
  • 俄乌直接谈判勉强收场,特朗普再次“电话外交”能否有用?|907编辑部
  • 世卫大会连续9年拒绝涉台提案
  • 日月谭天 | 赖清德倒行逆施“三宗罪”,让岛内民众怒不可遏
  • 三星“七天机”质保期内屏幕漏液被拒保,澎湃介入后已解决
  • 19国入境团抵沪并游玩,老外震惊:“怎么能有这么多人?”