c++常用STL库及常用函数

2023-05-16

临近各种算法比赛,相信很多人想笔者一样还总是记不住很多函数的用法,特此总结一下常用的STL标准库以及标准函数,希望能够有所帮助。

1. 输入输出

输入输出一般用两个标准库:

#include<cstdio>
#include<iostream>

一般笔者更习惯一些iostream库,iostream唯一比较常用但是难记的或许就是以下这句。

ios::sync_with_stdio(0);
cin.tie(0);
// cout.tie(0);

这句可以使得c++的cin,cout语句拥有接近printf和scanf的速度。

之所以不用printf和scanf,则纯粹是大学先接触的cin、cout罢了

2. 数组

一般来说,使用c++标准的数组也就足够了:

int arr[10005];

不过一些特殊情况下,我们肯能还是需要用到c++封装好的数组:vector。

vector可以支持在常数时间内的随机访问和尾部插入/删除操作,其使用案例如下:

# include<vector>

int<vector> vec(n); // n指定长度

// 常用函数
vec.push_back(number);
vec.pop_back();
int n=vec.size();

// 其它函数
vec.clear();
bool flag=vec.empty();

// 遍历方法
//1. 传统方法
int n=vec.size();
for(int i=0;i<n;i++{
  cout<<vec[i]<<endl;
}

//2. C++11中的方法
  for (auto num:vec)
  {
    cout<<num<<endl;
  }

3. set与map

可以说,set与map是C++中,除了数组之外最常用搞得数据结构了。set与map通常我们使用这四种类。

#include<set>
#include<unordered_set>

#include<map>
#include<unordered_map>

其中,加入unordered 前缀意味者不需要排序。如果没有unordered 前缀,那么该集合中的元素将会按照红黑树自动排序,这在我们需要有序数据或是遍历的时候较为有用。而加入unordered 前缀后,则集合中的元素会基于哈希表组织,插入和查找的时间复杂度很低(常数时间)。

以下是一些它们常用的函数(加入unordered 前缀与不加对应的函数是几乎一致的,只是内部实现略有不同)。

// 集合
set<int> s;

// 常用函数
int n=s.size();
s.insert(num);
s.erase(num);
s.count(num); // 常用来判断有无这一元素

// 遍历元素
set<int>::iterator it;
for(it = s1.begin(); it!=s1.end(); it++){ //自动排序元素
    cout<<*it<<endl;  // 这里的it是个指向数据的指针
}
//c++ 11
for(auto it : s){
    cout<<it<<endl;   // 这里的it就是数据本身
}
 
// map
map<string, int> m;

// 常用函数
int n=m.size();
m[key]=value; // 最简单的插入方法(个人认为)
m.erase(key);
s.count(key); // 常用来判断有无这一元素

// 遍历元素
map<string, int>::iterator it;
for (it = m.begin(); it != m.end(); it++) {
    cout<<it->first<<" "<<it->second<<endl;
}
// c++ 11
for(auto it : m){
    cout<<it.first<<" "<<it.second<<endl;
}

4. 常用算法(sort)

c++中,我们也会经常使用一些常用的算法,它们大多定义在algorithm包中,也有一些在std标准命名空间中:

using namespace std;

int max_value=max(a,b);

同时,algorithm中最常用的函数莫过于sort函数了,掌握sort函数非常重要。

#include<algorithm>

sort(vec.begin(),vec.end()); // 一般sort是针对vec或传统数组的,毕竟map和set本身自动排序

至于其它的算法,我认为不是特别重要,故直接省略

5. 栈和队列

除了上述所说的较为重要的库,栈和队列在数据结构中也是非常重要的。

#include <queue>
#include <stack>

// 队列
queue<int> q;
q.push(num);
q.pop();
int n=q.size();
bool isEmpty=q.empty();
int first=q.front(); // 队头
int last=q.back();   // 队尾:最后一个push进去的元素是队尾!

// 栈
stack<int>st;
st.push(num);
st.pop();
int top=q.top(); //栈顶元素
int n=st.size();
bool isEmpty=st.empty();

6. 优先队列和双端队列

优先队列

优先队列也在queue 库中,最简单的用法就是直接声明如下:

#include <queue>
priority_queue<int> q; 

这时q的元素就会自动从小到大排序。

当然,还有复杂一些的用法:

#include <queue>
// 大根堆
priority_queue<int> q; //等同于 priority_queue<int, vector<int>, less<int>> a;

// 小根堆
priority_queue<int, vector<int>, greater<int>> q;


// 常用函数
q.push(num);
int top=q.top();
q.pop();

我们可以使用实际的代码看看效果:

# include<iostream>
# include<queue> 
using namespace std;
int main(){
  priority_queue<int>q;
  q.push(1);
  q.push(3);
  q.push(2);
  cout<<q.top()<<endl; // 类似于普通队列的back()
  q.pop();
  cout<<q.top()<<endl; 
}
// 结果:3 2

# include<iostream>
# include<queue> 
using namespace std;
int main(){
  priority_queue<int,vector<int>,greater<int>>q;
  q.push(1);
  q.push(3);
  q.push(2);
  cout<<q.top()<<endl;
  q.pop();
  cout<<q.top()<<endl; 
}
// 结果:1 2

双端队列

piriority_queue包含在queue中不同,双端队列在新的STL库(deque)中:

#include<deque>

queue<int>q;

// 常用函数: front指队头,back指队尾(新插入的)
q.push_back(num);
q.push_front(num);
q.pop_back();
q.pop_front();
int num=q.front();
int num=q.back();
int n=q.size();
bool flag=q.empty();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++常用STL库及常用函数 的相关文章

  • 【FreeRTOS(六)】队列

    文章目录 队列创建队列 xQueueCreate发送消息至队列 xQueueSend接受队列消息 xQueueReceive获取队列信息数目 uxQueueMessagesWaiting代码示例创建队列集 xQueueCreateSet将队
  • 2021-09-29 使用安卓手机Camera和IMU信息运行ORBSLAM3

    目的 安卓手机具备camera imu gps等SLAM技术所需要的传感器 xff0c 且安卓手机很普及 如果能使用安卓设备作为ros的sensor xff0c 通过安卓设备节点传输到计算机 xff0c 进行实时定位与建图分析 xff0c
  • 【ESP32 WiFi篇(五)】ESP32 HTTP

    文章目录 1 HTTP概述1 1 超文本1 2 请求 响应1 3 TCP 2 HTTP请求和响应2 1 HTTP请求响应过程2 2 客户端请求消息2 2 1 请求行2 2 1 1 请求方法2 2 1 2 URL2 2 1 3 HTTP版本
  • 【Linux 裸机篇(五)】I.MX6ULL BSP工程管理下的 Makefile编写、链接脚本

    目录 一 BSP 工程二 Makefile三 链接脚本 Makefile 的静态模式和函数1 静态模式2 函数2 1 patsubst2 2 dir2 3 notdir2 4 foreach 一 BSP 工程 文件夹描述bsp存放驱动文件i
  • 【Linux 裸机篇(六)】I.MX6U 主频和时钟配置

    目录 一 时钟系统详解1 系统时钟来源2 7路 PLL 时钟源2 1 ARM PLL PLL1 2 2 528 PLL PLL2 2 3 USB1 PLL PLL3 2 4 USB2 PLL PLL7 2 5 ENET PLL PLL6 2
  • 【Linux 裸机篇(七)】I.MX6U 中断系统

    目录 一 中断向量表1 中断向量偏移 二 中断系统简介1 创建中断向量表 三 GIC 控制器简介1 中断 ID 四 GIC 逻辑分块1 Distributor 分发器端 2 CPU Interface CPU 接口端 五 CP15 协处理器
  • 【Linux 裸机篇(八)】I.MX6U EPIT 定时器中断、定时器按键消抖

    目录 一 EPIT 定时器简介二 定时器按键消抖 一 EPIT 定时器简介 EPIT 的全称是 xff1a Enhanced Periodic Interrupt Timer xff0c 直译过来就是增强的周期中断定时器 xff0c 它主要
  • PCB拼板和工艺边教程

    PCB拼板 xff0c 主要是为了充分利用板材 xff0c 从而提高生产效率 比较简单的是 xff0c 规则板框的拼板 如上图的 xff0c 板框是正方形 xff0c 很容易就拼了四块板 xff0c 其中 xff0c 只需要有一块板有布线
  • curl命令模拟get请求时遇到特殊字符{}被过滤异常处理

    curl命令模拟get请求时遇到特殊字符 xff0c 接口接受参数不符合预期 crul请求 curl GET http test com opdgApply pageNum 61 1 amp sortDesc 61 true amp sea
  • 函数声明在头文件中的好处,可以利用静态库隐藏算法

    背景 xff1a 现在有个程序员A想实现一个算法 xff0c 这个算法是俩数之和 xff0c 他自己不会于是他去买程序员B的已经做好的算法 xff0c 但是程序员B不想让他看到算法结构应该怎么做 1 首先程序员B需要写程序 xff0c 包括
  • Javaparser使用

    Javaparser使用 什么是Javaparser 分析 转换 生成Java代码 Javaparser库为你提供了一个 Java 代码的抽象语法树 Abstract Syntax Tree AST 结构允许您以一种简单的编程方式使用 Ja
  • YUV和RGB图像格式说明

    对于进行图像处理的程序员来说 xff0c 图像格式是必须了解的问题 本文不涉及压缩图像格式 xff0c 只对YUV和RGB图像进行描述 1 RGB图像和YUV图像区别 RGB和YUV图像的区别在于色彩空间坐标系描述上不同 xff0c 就如同
  • CMake 常用指令

    文章目录 范式环境 amp 工程配置 96 cmake minimum required 96 96 project 96 96 file 96 添加头文件搜索路径 96 link directories 96 96 add compile
  • (JAVA)国际跳棋--棋里乾坤

    导入 因为假期内被朋友带入坑后起了兴趣 xff0c 但发现网上似乎没有什么人写过国际跳棋的相关制作过程 xff0c 于是制作了一个单纯的java的国际跳棋程序 xff0c 虽然没有AI xff0c 但能够实现玩家双方的任务和皮肤 目前只设置
  • 力扣刷题日记 211. 添加与搜索单词

    211 添加与搜索单词 题目描述题解思路代码结语 题目描述 题解思路 首先 xff0c 这道题要求我们给出所有结果 xff0c 那就意味着我们可能只能选择枚举这一条路 xff0c 然后再看到数据范围 xff0c 好家 伙 xff0c 确实挺
  • 力扣刷题日记 798. 得分最高的最小轮调

    798 得分最高的最小轮调 题目描述题解思路代码结语 题目描述 题解思路 数据范围没有截图到 xff0c 这里的数据范围为0 20000 题目的内容还是很好理解的 xff0c 就是给你一个数组 xff0c 你可以将数组内容向左推移若干次 x
  • Java实现简单的计算器

    文章目录 前言一 主界面部分二 监听器部分三 结果计算部分总结 前言 最近在复习着Java Swing的使用 xff0c 在布局这块反复又看了很久 xff0c 然后突然发现GirdLayout机器适合来做一个计算器的简单样子 xff0c 所
  • 多旋翼飞行器设计与控制(一)

    一 基本概念固定翼直升机多旋翼复合飞行器 二 操控和评价四旋翼操控对比评价局限性 三 发展历史休眠期 xff08 1990前 xff09 复苏期 xff08 1990 2005 xff09 产品方面学术方面 发展期 xff08 2005 2
  • 考试中暴露的问题

    1 注意位运算 可以去看看洛谷里如果城堡不用位运算处理的话会怎样233 2 注意数学函数 xff0c 如sqrt为开根号 xff0c abs为绝对值 xff1b 3 最长上升子序列upper bound与lower bound的用法要知道
  • 10月28日考试解题报告

    考试中的心路历程 说实话第一道题和第三道题真的是水题 xff0c 然鹅我只搞到了100分 xff0c 感觉有些亏 xff0c 最后一题看错了题目 xff0c 导致我的思路开始各种螺旋 xff0c 当其他人都为第二题思考的时候 xff0c 我

随机推荐

  • 10月30日解题报告

    做题思路 第一题表示根本没有想到是线段树这种东西 xff0c 结果看到题解的时候 内心是崩溃的 xff0c 看了线段树还是得多练练 xff0c 第二题是dp xff0c 算是简单 xff0c 但是自己没有想到还是很伤 xff0c 也还是要多
  • C++ 获取string字符串长度的三种方法

    1 用string的成员方法length 获取字符串长度 length 比较直观 xff0c 表示的就是该字符串的长度 include lt string gt include lt iostream gt using namespace
  • sublime text3 搭建python环境

    1 python下载 python安装文件下载 2 安装easy install 方法是下载ez setup py后 xff0c 在cmd下执行 pythonez setup py xff0c 即可自动安装setuptools window
  • C++ 字符串指针和字符串指针数组详解

    C 43 43 处理字符串有两种方式 xff0c 即 xff1a 指针方式和数组方式 数组方式 xff1a char a 61 34 HelloWorld 34 指针方式 xff1a const char s 61 34 HelloWorl
  • 【C++笔记】关于push_back(vector<int>());

    vector lt vector lt int gt gt vec vec push back vector lt int gt vec back push back vec n push back 今天在刷leetcode题的时候见到如上
  • C++ const用法总结

    const 是constant的简写 xff0c 是C 43 43 中极为常见且重要的关键字 xff0c 主要功能是设置某些参数不可修改 xff0c 今天对其用法进行总结记录 一 在变量中的用法 对变量进行修饰是const最基本的用法 xf
  • C++ 函数指针以及对void*(* func)(void *)的解读

    1 函数指针 我们知道调用一个函数的时候可以给其传递参数 xff0c 这个参数可以是变量 xff0c 也可以是变量的引用或者指针 那如果想传递另一个函数可以做到吗 xff1f C提供了函数指针这一用法来完成这个需求 函数在内存中是占据一片空
  • 线程同步之互斥锁

    1 问题 单线程执行任务的场景通常是简单不易出错的 xff0c 但是多线程执行任务时 xff0c 由于线程对于内存空间的共享特性 xff0c 在并发执行时却会产生一些意料之外的错误 如下列程序 xff1a include 34 unpthr
  • C++知识点梳理(1)

    C 43 43 程序由一个或者多个被称为函数的模块组成 和函数从main函数 xff08 全部小写 xff09 开始执行 xff0c 所以main函数必不可少 函数头指向函数的返回值 xff08 如果有函数头 xff09 的类型和函数期望通
  • 串口扩展研究

    串口扩展研究 曾几何时 xff0c 鼠标键盘还是PS 2接口 xff0c 在向USB过渡过程中会有一些 USB to PS 2 神器出现 当主设备 xff08 电脑 xff09 和从设备 xff08 鼠标键盘 xff09 都配标准的USB接
  • cmake 工具 三 add_libary, set_target_properties,target_link_libary,link_directories, link_libary

    一起通过一个例子学一下 add libary xff0c set target properties xff0c link libary xff0c target link libary 四个命令 首先创建如下的文件 xff1a 其中 bu
  • ESP32-C3入门教程 蓝牙篇①——基于Blufi 的 WiFi 智能配网

    文章目录 一 前言 二 WiFi配网方式 三 快速运行 四 运行效果 五 程序流程 精简 5 1 WiFi 初始化 5 2 BLE 初始化 5 3 WiFi 回调函数 5 4 BLE 回调函数 5 5 Blufi 回调函数 5 6 流程图
  • FreeRTOS STM32 线程创建失败,单步运行一看才发现是内存不够

    文章目录 一 FreeRTOS线程创建失败二 失败的解决方法三 成功的解决方法 一 FreeRTOS线程创建失败 今天用STM32板子跑一个测试demo xff0c 结果一上车就翻车 一个简简单单的线程起不来 断点进不去 xff0c 单步运
  • HTML5 播放器

    暂存一些HTML5播放器的资料 xff0c 慢慢消化 使用 HTML5 技术播放视频 使用 Clear Key 加密 MP4 视频并播放 Encrypted Media Extensions An introduction to Encry
  • ESP32-C3入门教程 蓝牙篇③——基于微信小程序和Esp Blufi实现 WiFi配网

    基于微信小程序和Esp Blufi实现 WiFi配网 文章目录 一 前言 二 软件框架 三 软件流程 四 API介绍 五 全部源码 一 前言 本文基于VS Code IDE进行编程 编译 下载 运行等操作 基础入门章节请查阅 ESP32 C
  • 路由器重温——接口配置与管理1

    路由器的接口相对于交换机接口来说最大的特点就是接口类型和配置更为复杂 xff0c 一般可以把路由器上的接口分为三大类 xff1a 一类是用于局域网组网的LAN接口 xff0c 另一类是用于广域网接入 互联的WAN接口 xff0c 最后一类可
  • 路由器接口配置与管理——1

    路由器的接口相对于交换机来说最大的特点就是接口类型和配置更为复杂 xff0c 一般吧路由器上的接口分为三大类 xff1a 一类用于局域网的LAN接口 xff0c 一类用于广域网接入 互联的WAN接口 xff0c 最后一类可以应用于LAN组网
  • 使用A*算法寻找路径

    使用A xff0a 算法首先需要将地图分成一个个块 xff0c 每个块称为一个节点 算法主要是维护两张表 openList和closeList openList用来保存待考察的节点 xff0c closeList用来保存不需要考察的节点 算
  • 关于C++中的#define

    include lt iostream gt using namespace std define ADD x y x 43 y 试卷上是减号 xff0c 本人觉得是加号 int main int m 61 3 int n 61 4 m 4
  • c++常用STL库及常用函数

    临近各种算法比赛 xff0c 相信很多人想笔者一样还总是记不住很多函数的用法 xff0c 特此总结一下常用的STL标准库以及标准函数 xff0c 希望能够有所帮助 1 输入输出 输入输出一般用两个标准库 xff1a include lt c