首页 > 编程语言 >C++ STL容器

C++ STL容器

时间:2023-04-29 20:56:27浏览次数:52  
标签:返回 容器 set 迭代 STL 元素 C++ queue vector

vector 变长数组, 倍增的思想

string 字符串, substr() , c_str()

queue 队列, push() , front() , pop()

priority_queue 优先队列, push() , top() , pop()

stack 栈, push() , top() , pop()

deque 双端队列

set , map , multiset , multimap 基于平衡二叉树(红黑树), 动态维护有序序列

unordered_set , unordered_map , unordered_multiset , unordered_multimap 哈希表

bitset 压位



vector

初始化:

vector <int> a (10) 长度为10的数组

vector <int> a (10,3) 长度为10的数组, 每一个数为3

vector <int> a [10] 定义了10个vector


vector 支持的函数:

a.size() 返回元素个数

a.empty() 空返回 true , 非空返回 false

a.clear() 清空

a.front() / a.back() 返回第一个数/ 最后一个数

a.push_back() 在最后插入一个数

a.pop_back() 删除最后一个数

a.begin() 返回 a 的第一个元素的迭代器

a.end() 返回 a 的最后一个元素的下一个元素的迭代器

a[] vector 支持随机寻址


vector 的遍历:

for(int i = 0 ; i < a.size() ; i++) cout << a[i] << ' '; 用数组下标遍历

for(vector<int>::iterator i = a.begin() ; i != a.end() ; i++) cout << *i << ' '; 用迭代器遍历

for(auto x : a) cout << x << ' '; C++的范围遍历


倍增思想: 系统为某一程序分配空间时所需时间, 与空间大小无关, 与申请次数有关.

vector 每一次数组长度不够时, 将数组长度扩大一倍.




pair

初始化:

pair <int,int> p

pair <int,pair <int,int>> p


pair 支持的操作:

p.first 返回第一个元素

p.second 返回第二个元素




string

初始化: string a


string 支持的函数:

a.length() 返回字符串长度

a.size() 返回元素个数

a.empty() 空返回 true , 非空返回 false

a.clear() 清空

a.find('x') 返回字符 x 在字符串中下标

a.substr(,) 返回某个子串

第一个参数表示子串起点下标, 第二个参数表示子串长度.

若第二个参数过大(或无第二个参数), 返回从第一个参数开始的整个子串.


若用 printf 输出 string 要用 a.c_str()




queue

初始化: queue <int> a


queue 支持的函数:

a.size() 返回元素个数

a.empty() 空返回 true , 非空返回 false

a.push(x) 向队尾插入一个元素 x

a.front() 返回队头元素

a.back() 返回队尾元素

a.pop() 弹出队头元素


注意: queue 没有 clear 函数

a = queue <int> (); 相当于 clear 功能




priority_queue

初始化:

priority_queue <int> heap 优先队列, 默认是大根堆

priority_queue <int,vector<int>,greater<int>> heap 定义小根堆


priority_queue 支持的函数:

heap.push(x) 插入一个元素 x

heap.top() 返回堆顶元素

heap.pop() 弹出堆顶元素


注意: priority_queue 没有 clear 元素




stack

初始化: stack <int> a


stack 支持的函数:

a.size() 返回元素个数

a.empty() 空返回 true , 非空返回 false

a.push(x) 向栈顶插入一个元素 x

a.top() 返回栈顶元素

a.pop() 弹出栈顶元素


注意: stack 没有 clear 函数




deque

初始化: deque <int> q


deque 支持的函数:

q.size() 返回元素个数

q.empty() 空返回 true , 非空返回 false

q.clear() 清空

q.front() 返回队头元素

q.back() 返回队尾元素

q.push_back() 向队尾插入一个元素 x

q.pop_back() 弹出队尾元素

q.push_front() 向队头插入一个元素 x

q.pop_front() 弹出队头元素

q[] deque 支持随机访址

q.begin() 返回第一个元素的迭代器

q.end() 返回最后一个元素下一个元素的迭代器




set / multiset

set 元素不能重复, multiset 元素可以重复


初始化:

set <int> s

multiset <int> ms


set / multiset 支持的函数:

s.size() 返回元素个数

s.empty() 空返回 true , 非空返回 false

s.clear() 清空

s.insert(x) 插入一个数 x

s.find(x) 查找一个数 x , 存在返回 x 的迭代器, 不存在返回 end() 的迭代器

s.count(x) 返回某一个数 x 的个数

s.erase() 输入的是一个数 x , 则删除所有 x ; 输入的是一个迭代器, 则删除这个迭代器

s.lower_bound(x) 返回大于等于 x 的最小的数的迭代器, 不存在则返回 end()

s.upper_bound(x) 返回大于 x 的最小的数的迭代器, 不存在则返回 end()

++ / -- 返回前驱/ 后继的迭代器




map / multimap

初始化:

map <string,int> a

a ["xt"] = 666

cout << a ["xt"] <<endl; 输出"1"

可将第一个参数作为数组下标


map / multimap 支持的函数:

a.size() 返回元素个数

a.empty() 空返回 true , 非空返回 false

a.clear() 清空

a.begin() 返回第一个元素的迭代器

a.end() 返回最后一个元素下一个元素的迭代器

++ / -- 返回前驱/ 后继的迭代器

a.insert() 插入的数需要是一个 pair

a.erase() 输入的参数需要是一个 pair 或迭代器

a.find()

a[]




unordered_set / unordered_map / unordered_multiset / unordered_multimap

允许存在重复元素的 setmap

增删查改的时间复杂度是 O(1)

除不支持 lower_bound()upper_bound() 外, 其余支持函数与 setmap 相同




bitset

初始化: bitset <10000> S

bitset 只能存储 01 , < > 内参数表示长度


bitset 支持的操作:

~S 取反

& , | , ^ 与、或、异或

>> , << 位运算

== , != 等于、不等于

S.count() 返回有多少个 1

S.any() 判断是否至少有一个 1

S.none() 判断是否全为 0

S.set() 把所有位置成 1

S.set(k,v) 把第 k 位变成 v

S.reset() 把所有位置成 0

S.flip() 把所有位取反

S.flip(k) 把第 k 位取反



标签:返回,容器,set,迭代,STL,元素,C++,queue,vector
From: https://www.cnblogs.com/evilboy/p/17364466.html

相关文章

  • python+playwright 学习-55 在docker 容器中运行playwright脚本
    前言Dockerfile.focal可用于在Docker环境中运行Playwright脚本。这些镜像包括在Docker容器中运行浏览器所需的所有依赖项,还包括浏览器本身。playwright在linux系统上目前只支持Ubuntu系统的部分版本,centos和debian系统上是没法运行的。镜像查看所有可用的图像标签https:......
  • C++中的STL容器和算法
    C++STL(标准模板库)提供了一组丰富的容器和算法,使得开发者能够更加高效地编写程序。本文将介绍STL中的一些常用容器和算法。容器vectorvector是一个动态数组,可以在运行时调整大小。它的优点在于可以快速地访问元素,缺点是在插入和删除元素时需要移动后面的元素。#include<vec......
  • C++-#pargma once
    C++-#pargmaoncehttps://baike.baidu.com/item/%23pragmaonce/9468158?fr=aladdin#pragmaonce是一个比较常用的C/C++预处理指令。只在头文件的最开始加入这条预处理指令,就能够保证头文件只被编译一次。基本信息#pragmaonce是编译器相关的,有的编译器支持,有的编译器不支......
  • C++-std::this_thread::get_id()-获取线程id
    C++-std::this_thread::get_id()-获取线程idstd::this_thread::get_id()头文件:<thread>函数:std::this_thread::get_id()用例:std::thread::idthread_id=std::this_thread::get_id();std::thread对象的成员函数get_id()头文件:<thread>函数:std::thread::idget_id()用例:......
  • C++-改变终端(cout/printf)输出不同颜色的字体-Linux
    C++-改变终端(cout/printf)输出不同颜色的字体-Linuxhttps://blog.csdn.net/qq_41972382/article/details/90311102不同颜色的输出主要依据格式ESC[*m,ESC的八进制为\033,*可以是多个属性的组合,用,隔开。printf#include<iostream>usingnamespacestd;intmain(){print......
  • C++-标准异常`<exception>`
    C++-标准异常<exception>std::exception定义于头文件<exception>classexception;https://www.apiref.com/cpp-zh/cpp/error/exception.html标准库头文件<stdexcept>https://www.apiref.com/cpp-zh/cpp/header/stdexcept.htmlstd::exceptionstd::bad_allocs......
  • C++用new创建的对象和不用new创建的对象的区别
     在C++中,使用new关键字来创建对象时,与不使用new关键字来创建对象时,会产生以下几个区别:内存管理:使用new关键字来创建对象时,由编译器来决定分配内存的方式,这样可以更有效地利用内存资源。而不使用new关键字来创建对象时,则需要手动分配内存,可能会浪费一些内存资源。对象生命周期......
  • 我刚才用了dynamic_cast 你给我普及一下C++ 中这几种类型转换吧
    我刚才用了dynamic_cast你给我普及一下C++中这几种类型转换吧在C++中,有几种类型转换的方式,包括:隐式转换在一些情况下,编译器会自动进行类型转换。比如将整型变量赋值给浮点型变量,编译器就会自动将整型变量转换为浮点型变量。但是在大多数情况下,使用隐式转换可能会引起一些问......
  • 4-28打卡c++ string容器
    1#include<iostream>2#include<string>3usingnamespacestd;4//assign5voidtest01()6{7stringstr1;8//截取三个字符9str1.assign("hello,world",3);10//从第三个字符开始截取4个字符11str1.assign("hello,worl......
  • C++ 中 string自带的find()详解
    首先find()函数存在于string对象中,对于任何一个string类对象都自带find函数,这意味着我们可以对find函数进行重载。find()一共可传七个参数,但是常用的的只有四种情况:对于C++98来说:string(1)传入两个参数,一个是对另一string对象的常引用,一是开始查找的位......