首页 > 其他分享 >STL常用容器用法总结

STL常用容器用法总结

时间:2023-09-15 21:35:21浏览次数:52  
标签:返回 容器 STL 元素 bound 用法 back empty size

vector

变长数组,倍增的思想
size()  返回元素个数
empty()  返回是否为空
clear()  清空
front()/back()
push_back()/pop_back()
begin()/end()
[]
支持比较运算,按字典序

pair<int, int>

first, 第一个元素
second, 第二个元素
支持比较运算,以first为第一关键字,以second为第二关键字(字典序)

string

字符串
size()/length()  返回字符串长度
empty()
clear()
substr(起始下标,(子串长度))  返回子串
c_str()  返回字符串所在字符数组的起始地址

queue

队列
size()
empty()
push()  向队尾插入一个元素
front()  返回队头元素
back()  返回队尾元素
pop()  弹出队头元素

priority_queue

优先队列,默认是大根堆
size()
empty()
push()  插入一个元素
top()  返回堆顶元素
pop()  弹出堆顶元素
定义成小根堆的方式:priority_queue<int, vector<int>, greater<int>> q;

stack

栈
size()
empty()
push()  向栈顶插入一个元素
top()  返回栈顶元素
pop()  弹出栈顶元素

deque

双端队列
size()
empty()
clear()
front()/back()
push_back()/pop_back()
push_front()/pop_front()
begin()/end()
[]

set, map, multiset, multimap

基于平衡二叉树(红黑树),动态维护有序序列。当我们需要对序列进行删除操作同时要求其仍然保持有序可以考虑采用这些容器
size()
empty()
clear()
begin()/end()
++, -- 返回前驱和后继,时间复杂度 O(logn)

set/multiset
    insert()  插入一个数
    find()  查找一个数
    count()  返回某一个数的个数
    erase()
        (1) 输入是一个数x,删除所有x   O(k + logn)
        (2) 输入一个迭代器,删除这个迭代器
    lower_bound()/upper_bound()
        lower_bound(x)  返回大于等于x的最小的数的迭代器
        upper_bound(x)  返回大于x的最小的数的迭代器
map/multimap
    insert()  插入的数是一个pair
    erase()  输入的参数是pair或者迭代器
    find()  查找某元素,找不到返回end()
    count() 查找元素在map中的出现次数,找不到返回0
    []  注意multimap不支持此操作。 时间复杂度是 O(logn)
    lower_bound()/upper_bound()

一道multiset的应用题目 单就维护动态有序序列这件事,通过使用标记也可以达到,即通过标记表示哪些元素被删除了 就上述题目而言,每次都需要memcpy一遍标记数组,而数组容量的数量级为1e6级别,但是实际数据个数的数量级却仅为1e3级别,容器拷贝时间消耗明显小于标记数组的复制与恢复 但就这道题而言,使用容器维护才能满足时间要求,但并不代表维护动态有序序列这件事每次都是使用容器完成

unordered_set, unordered_map, unordered_multiset, unordered_multimap

哈希表
和上面类似,增删改查的时间复杂度是 O(1)
不支持 lower_bound()/upper_bound(), 迭代器的++,--

bitset

圧位
bitset<10000> s;
~, &, |, ^
>>, <<
==, !=
[]

count()  返回有多少个1

any()  判断是否至少有一个1
none()  判断是否全为0

set()  把所有位置成1
set(k, v)  将第k位变成v
reset()  把所有位变成0
flip()  等价于~
flip(k) 把第k位取反

tuple

Using this container to package multiple elements into one element. You can use initializer list to initialize a tuple, and use structured bindings to analyse a tuple. These properties can use by a function which has multiple return values.

variant

Note that this container only starts with C++17 standard.

If you want to use one variable to restore multiple types of data, you can use std::variant<type1, type2, ...>

  1. Get value from container: std::get<>()
  2. Determine which type does the container store: std::holds_alternative<>()
  3. Get the index of type: .index()
  4. Enumerate multiple types of variant container: std::visit(func, container)

标签:返回,容器,STL,元素,bound,用法,back,empty,size
From: https://blog.51cto.com/u_14882565/7486976

相关文章

  • STL(12) RBTREE 红黑树
    目录红黑树的基本原理基本要求变色和旋转rbtree源码G2.9示例2.94.9treenode的构造关联式容器:查找快,插入快STL中的主要代表:红黑树,hashtable红黑树的基本原理单个结点来看,左孩子小于根节点,右孩子大于根节点(二叉搜索树)红黑树是什么,有什么意义:排序二叉树有不平衡的问题,可能左......
  • boost多索引容器的使用介绍
    boost是基于C++11的被广泛使用的开源库;多索引容器实现了可以通过多个索引去查找数据,不像std::map一样只能通过单一索引key查找对应value值。多索引容器可以通过多个索引key查找对应value值。多对多的方式,有了更多的应用场景。其实现了STL的一些基本操作,如迭代器等。如下示例作......
  • less-基础用法
    什么是less?less,suss,stylus都是css的动态扩展语言.三种都大同小异官网:https://less.nodejs.cn/怎么用?与Node.js一起使用:安装:npminstall-gless编译:lesscstyles.lessstyles.css在浏览器使用:<linkrel="stylesheet/less"type="text/css"href=......
  • 软件测试|深入解析Docker Run命令:创建和启动容器的完全指南
    简介Docker是一种流行的容器化平台,用于构建、分发和运行应用程序。其中一个最基本且重要的Docker命令是dockerrun,用于创建和启动容器。本文将详细解析dockerrun命令的用途、参数和示例,帮助您全面掌握创建和启动容器的过程。dockerrun在Docker中,容器是运行应用程序的独立环......
  • C++中STL用法汇总
    1什么是STL?STL(StandardTemplateLibrary),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++StandardLibrary)中,是ANSI/ISOC++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程......
  • 软件测试|全面解析Docker Start/Stop/Restart命令:管理容器生命周期的必备工具
    简介Docker是一种流行的容器化平台,用于构建、分发和运行应用程序。在使用Docker时,经常需要管理容器的生命周期,包括启动、停止和重启容器。本文将详细介绍Docker中的dockerstart、dockerstop和dockerrestart命令,帮助您全面了解如何管理容器的运行状态。在Docker中,容器是独立......
  • 软件测试|Docker cp命令详解:在Docker容器和主机之间复制文件/文件夹
    简介Docker是一种流行的容器化平台,它允许开发人员在独立、可移植的环境中构建、打包和部署应用程序。在使用Docker时,常常需要在Docker容器和主机之间进行文件的复制和共享。Docker提供了一个名为dockercp的命令,可以轻松地在容器和主机之间复制文件和目录。本文将详细介绍docker......
  • 神奇均线的实战用法——指标实战
    神奇均线的公式如下:VAR1:=(2*C+H+L+O)/5;A1:=(EMA(VAR1,5)+EMA(VAR1,8)+EMA(VAR1,13)+EMA(VAR1,21))/4;A2:=EMA(A1,2);A3:=EMA(A2,2);A4:=EMA(A3,2);A5:=EMA(A4,2);A6:=EMA(A5,2);中线:EMA(A6,2);短线1:EMA(VAR1,2.78)*1.028;短线2:MA(O,3.2)*1.028;安全线:EMA(C,55),C......
  • 在 Linux Docker 容器中安装 Windows 虚拟机
    1查看或开启虚拟化我们需要检查我们的系统是否支持虚拟化。由于我们的容器将运行虚拟机管理程序,因此除非主平台支持虚拟化,否则它将无法工作。物理机可以通过bios进行开启,虚拟机也需要开启。这个是虚拟化的内容,所以自行百度打开sudoegrep-c'(vmx|svm)'/proc/cpuinfo2安......
  • Vue--this的指代问题及用法
    Vue--this的指代问题及用法this在普通函数(function(){})里,指代调用该函数(方法)的对象this在箭头函数(()=>{})里,指代定义该箭头函数的外层对象在axios调用当前vue实例的data:axios回调函数(.then())是在执行栈中被执行,其中this指向window,若要在axios中取后端数据并......