常用c++ STL 汇总
常用STL:
vector
- 变长数组,倍增的思想
- 初始化:
//初始化
vector<int> a;
vector<int> a(n);
vector<int> a[n];
vector<int> a(n, 0);//长度为n,值为0
- 操作:
size() //返回元素个数
empty() //返回是否为空
clear() //清空
front()/back() //返回第一个/最后一个元素
push_back()/pop_back() //在尾端插入元素/删除元素
begin()/end() //迭代器
[] //随机访问
- 遍历:
for(int i = 0; i < a.size(); ++ i)
for(vector<int>::iterator/*auto*/ i = a.begin(); i != a.end(); ++ i)
for(auto x : a)
- 黑科技:
- 支持比较运算,按字典序比较
pair
- 二元组
- 初始化:
pair<T, T> p;
pair<T, pair<T, T>> p;
p = make_pair(a, b);
p = {a, b};
p.first/p.second //第一个元素/第二个元素
- 黑科技:
- 也支持比较运算
- 以first为第一关键字,以second为第二关键字
string
- 字符串
- 初始化:
string a = "adfb";
a += "adf";
a += 'c';
- 操作:
size()/length() //返回字符串长度
empty() //返回是否为空
clear() //清空
substr() //求子串
a.substr(st, len) //从下标st开始长度为len的子串
a.substr(st) //从st开始到结尾的子串
c_str() //返回字符串地址
//printf()无法输出string,但是可以printf("%s", a.c_str);
queue
- queue
- 队列
- 初始化:同数组
- 操作:
size()
empty()
push() //想队尾插入元素
pop() //弹出队头元素
front() //返回队头元素
back() //返回队尾元素
//队列没有clear()函数
- priority_queue
- 优先队列(堆)
- 初始化:
priority_queue<int> heap; //堆默认为大根堆
heap.push(-x); //将数反号实现小根堆
priority_queue<int, vector<int>, greater<int> > heap //直接定义小根堆
- 操作:
push() //插入一个元素
top() //返回堆顶元素
pop() //弹出堆顶元素
- queue
stack
- 栈
- 初始化:同数组
- 操作:
size()
empty()
push() //向栈顶插入元素
top() //返回栈顶元素
pop() //弹出栈顶元素
deque
- 双端队列
- 初始化:
- 操作:
size()
empty()
clear()
front()
back()
push_back()/pop_back()
push_front()/pop_front()
begin()/end()
[]
//操作多效率低
set
- set
- 集合:无重复元素
- 基于平衡二叉树
- 操作:
size()
empty()
clear()
insert() //插入一个数
find() // 查找一个数
count() //返回某个数的个数
erase() //输入一个数x,删除所有x;输入一个迭代器,删除这个迭代器
lower_bound() //返回大于等于x的最小的数的迭代器
upper_bound() //返回大于x的最小的数的迭代器
//增删查改时间复杂度为log(n)
- multiset
- 可以有重复元素
- 操作:同set
- 以下unoder 都不支持排序有关操作,因为是无序的,不支持lower_bound/upper_bound ,但是增删改查的时间复杂度为O(1),不支持迭代器的加减
- unordered_set
- unordered_multiset
- set
map
- map
- 基于平衡二叉树
- 元素是pair
- multimap
- 操作:
insert() //插入的数是一个pair
erase() //输入的参数是pair或者迭代器
find() map<string, int> a;
a["adf"] = 1; //支持随机插入/访问,时间复杂度为log(n)
lower_bound()/upper_bound()
//增删查改时间复杂度为log(n)
- 以下unoder 都不支持排序有关操作,因为是无序的,不支持lower_bound/upper_bound ,但是增删改查的时间复杂度为O(1),不支持迭代器的加减
- unordered_map
- unordered_multimap
- map
bitset
- 压位
- bool 类型位一个字节,8位
- 如:压位将bool 占用内存压缩1/8,使bool类型只占一个二进制位
- bitset 相当于一个二进制数组,数组里存0/1,一个数组元素占1个二进制位
- 初始化:
bitset<10000> s;
- 操作:
~, &, |, ^
>>, <<
==, !=
[]
count() //返回有多少1
any() //判断是否至少有一个1
none() //判断是否全为0
set() //把所有位置成1
set(k, v) //将第k位变成v
reset() //把所有位变成0
flip() //等价于~
flip(k) //把第k位取反
- 压位
常用c++ STL 汇总的更多相关文章
- 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)
前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...
- 常用的STL查找算法
常用的STL查找算法 <effective STL>中有句忠告,尽量用算法替代手写循环:查找少不了循环遍历,在这里总结下常用的STL查找算法: 查找有三种,即点线面: 点就是查找目标为单个 ...
- 常用Git命令汇总
常用Git命令汇总 跟着R哥来到了新公司(一个从硬件向互联网转型中的公司),新公司以前的代码基本是使用SVN做版本控制,甚至有些代码没有做版本控制,所以R哥叫HG做了一次Git分享,准备把公司所有的代 ...
- Mysql中常用的函数汇总
Mysql中常用的函数汇总: 一.数学函数abs(x) 返回x的绝对值bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制)ceiling(x) 返回大于x的最小整数值exp(x) 返回 ...
- ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS)
ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS) 1. 网站资源: ROSwiki官网:http://wiki.ros.org/cn GitHub ...
- React Native常用第三方组件汇总--史上最全 之一
React Native 项目常用第三方组件汇总: react-native-animatable 动画 react-native-carousel 轮播 react-native-countdown ...
- React Native常用第三方组件汇总--史上最全[转]
本文出处: http://blog.csdn.net/chichengjunma/article/details/52920137 React Native 项目常用第三方组件汇总: react-na ...
- 刷题常用的STL容器总结
本文归纳总结刷题常用到STL容器以及一些标准算法,主要包括: string.vector.map.pair.unordered_map.set.queue.priority_queue.stack,以 ...
- js如何操作表格(常用属性方法汇总)
js如何操作表格(常用属性方法汇总) 一.总结 一句话总结: 二.表格相关的属性和方法 1.1 Table 对象集合 cells[] 返回包含表格中所有单元格的一个数组. 语法:tableObject ...
- python-Redis模块常用的方法汇总
Redes模块常用的方法汇总 一.创建建Redis对象 1.直接使用 import redis r = redis.Redis(host='127.0.0.1', port=6379) 2.连接池使用 ...
随机推荐
- 网络编程之java简易聊天室实现
最近浅学习了一些关于网络编程方面的知识,视频是跟着狂神学习的,可能学习的不是很深 说到网络,相信大家都对TCP.UDP和HTTP协议这些都不是很陌生,学习这部分应该先对端口.Ip地址这些基础知识有一定 ...
- Flutter(十) 音频+视频播放
在Flutter中,我们有各种插件可供使用,从而实现音频和视频的播放功能. 例如,可以使用"text_to_speech"插件来将文字转换为语音,使用内置的"video_ ...
- 学习Golang时遇到的似懂非懂的概念
背景 这是我学习golang的第三天,大致已经掌握了golang的语法,但是着手开发的时候,却遇到了许多问题,例如golang导包机制.golang的项目管理规范.go mod生成project怎么管 ...
- NUXT3.0实现网络请求二次封装
最近在开发基于nuxt3.0的项目,看了官网的网络请求,感觉不太适合,就自己基于官网的useFetch()方法封装了一个网络请求,下面开始实现封装. 第一步:新建http.ts文件,用于编写封装代码 ...
- 2023-04-17:设计一个包含一些单词的特殊词典,并能够通过前缀和后缀来检索单词。 实现 WordFilter 类: WordFilter(string[] words) 使用词典中的单词 wor
2023-04-17:设计一个包含一些单词的特殊词典,并能够通过前缀和后缀来检索单词. 实现 WordFilter 类: WordFilter(string[] words) 使用词典中的单词 wor ...
- 2022-06-26:以下golang代码输出什么?A:true;B:false;C:编译错误。 package main import “fmt“ func main() { type
2022-06-26:以下golang代码输出什么?A:true:B:false:C:编译错误. package main import "fmt" func main() { t ...
- 2021-02-17:规定1和A对应、2和B对应、3和C对应...26和Z对应,那么一个数字字符串比如"111”就可以转化为:"AAA"、"KA"和"AK"。给定一个只有数字字符组成的字符串str,请问有多少种转化结果?
2021-02-17:规定1和A对应.2和B对应.3和C对应...26和Z对应,那么一个数字字符串比如"111"就可以转化为:"AAA"."KA&qu ...
- vue全家桶进阶之路49:Vue3 环境变量
vue3 环境变量 在Vue3中,可以通过环境变量来管理应用程序中的配置.这些配置可以包括后端API的URL.API key.跟踪ID等等.在不同的开发.测试.生产环境中使用不同的配置是非常有用的.V ...
- Python连接es笔记三之es更新操作
本文首发于公众号:Hunter后端 原文链接:Python连接es笔记三之es更新操作 这一篇笔记介绍如何使用 Python 对数据进行更新操作. 对于 es 的更新的操作,不用到 Search() ...
- Spring Cloud开发实践(七): 集成Consul配置中心
目录 Spring Cloud开发实践(一): 简介和根模块 Spring Cloud开发实践(二): Eureka服务和接口定义 Spring Cloud开发实践(三): 接口实现和下游调用 Spr ...