STL常用容器

stack

stack翻译为,是STL中实现的一个后进先出的容器。stack没有迭代器,因此无法通过下标快速访问元素C ++迭代器用于对数据结构中的元素进行顺序访问或随机访问)。

(1)push()

push(x)将x入栈

(2)top()

top()获得栈顶元素

(3)pop()

pop()用以弹出栈顶元素

(4)empty()

empty()可以检测stack是否为空;返回true为空,返回false为非空

(5)size()

size()返回stack内元素的个数

注意:

在使用pop()top()函数之前必须先使用empty()函数判断栈是否为空。

vector

vector翻译为向量,vector是为了实现动态数组的容器,是一种顺序容器,在内存中按顺序排列,因此可以通过下标([ ])快速访问,时间复杂度为o(1)。

(1)begin()

返回指向容器中第一个元素的迭代器,可以用于获取第一个元素:vector.begin()

begin()可以用于向量的初始化

//将向量b中从0-2(共三个)的元素赋值给a,a的类型为int型

vector<int>a(b.begin(),b.begin+3);

(2)end()

返回指向容器最后一个元素所在位置后一个位置的迭代器,如果要获取最后一个元素:vector.end() - 1

(3)front()

获取第一个元素

(4)back()

获取最后一个元素

(5)empty()

检测vector是否为空;返回true为空,返回false为非空

(6)size()

返回vector内元素的个数

(7)push_back()

push_back(x) 将x添加到vector尾部

(8)pop_back()

删除尾部的元素

(9)erase()

删除指定位置或者指定范围的元素:vector.erase(vector.begin() + 3) vector.erase(vector.begin(), vector.begin() + 3)

(10)insert()

在指定位置插入元素

vector.insert(vector.begin(), 10) 在vector的头部插入值为10的元素

vector.insert(vector.begin(), 2, 10) 在vector的头部插入两个值为10的元素

(11)reverse()

翻转指定范围内的元素

reverse(vector.begin(), vector.end()) 翻转向量的所有元素

queue

队列,简称对,是一种操作受限的线性表。限制为:只允许在队首删除(出队),队尾插入(入队),其特点是先进先出没有迭代器,因此无法通过下标快速访问元素

(1)push()

push(x)将x压入队列

(2)pop()

弹出队首元素

(3)front()

访问队首元素

(4)back()

访问队尾元素

(5)empty()

empty()可以检测queue是否为空,返回true为空,返回false为非空

(6)size()

size()返回queue内元素的个数

deque

双向队列,可以在队头和队尾插入数据,对应的也可以在队头和队尾删除数据。deque有迭代器,可以通过下标([ ])快速访问。

(1)begin()

返回指向容器中第一个元素的迭代器,可以用于获取第一个元素:deque.begin()

begin()可以用于向量的初始化

//将向量b中从0-2(共三个)的元素赋值给a,a的类型为int型

deque<int>a(b.begin(),b.begin+3);

(2)end()

返回指向容器最后一个元素所在位置后一个位置的迭代器,如果要获取最后一个元素:deque.end() - 1

(3)front()

获取第一个元素

(4)back()

获取最后一个元素

(5)empty()

检测vector是否为空;返回true为空,返回false为非空

(6)size()

返回vector内元素的个数

(7)push_front()

push_front(x) 将x添加到deque头部

(8)push_back()

push_back(x) 将x添加到deque尾部

(9)pop_front()

删除头部的元素

(10)pop_back()

删除尾部的元素

(11)erase()

删除指定位置或者指定范围的元素:deque.erase(deque.begin() + 3) deque.erase(deque.begin(), deque.begin() + 3)

(12)insert()

在指定位置插入元素

deque.insert(deque.begin(), 10) 在vector的头部插入值为10的元素

deque.insert(deque.begin(), 2, 10) 在vector的头部插入两个值为10的元素

(13)reverse()

翻转指定范围内的元素

reverse(deque.begin(), deque.end()) 翻转向量的所有元素

priority_queue

优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。

和队列基本操作相同:

  • top 访问队头元素
  • empty 队列是否为空
  • size 返回队列内元素个数
  • push 插入元素到队尾 (并排序)
  • emplace 原地构造一个元素并插入队列
  • pop 弹出队头元素
  • swap 交换内容

定义:priority_queue<Type, Container, Functional>

Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆

一般是:

//升序队列(小顶堆)
priority_queue <int,vector<int>,greater<int> > q;
//降序队列(大顶堆)
priority_queue <int,vector<int>,less<int> >q;

//greater和less是std实现的两个仿函数(就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了)

unordered_map

1、头文件

#include< unordered_map>

2、定义一个哈希表(key和value都是以int为例)

unordered_map<int,int> Hash; 第一个是key,第二个是value,key的值是唯一的。

哈希表的查找

it = Hash.find(1);

如果找不到返回的是Hash.end();

it = Hash.count(1);

找不到返回的是0,否则返回1

使用count,返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。

使用find,返回的是被查找元素的位置,没有则返回map.end()。

string

substr()函数

形式:s.substr(pos, len)

返回值: string,包含s中从pos开始的len个字符的拷贝(pos的默认值是0,len的默认值是s.size() - pos,即不加参数会默认拷贝整个s)

异常 :若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾。

例如:s.substr(2)表示从字符串第三个元素开始复制到末尾。

stoi()函数

  • 作用:将 n 进制的字符串转化为十进制
  • 用法stoi(字符串,起始位置,n进制(默认10进制)),将 n 进制的字符串转化为十进制
  • 举例:stoi(str, 0, 2); //将字符串 str 从 0 位置之后的数字的 2 进制数,转换为十进制

to_string()函数

将数值转化为字符串。返回对应的字符串。

算法知识总结 文章被收录于专栏

一些常见的算法知识

全部评论

相关推荐

11-15 17:19
湖南大学 Java
成果成果成果果:这是哪个公司的hr,这么离谱吗,我没见过用性别卡技术岗的,身边女性同学拿大厂offer的比比皆是
点赞 评论 收藏
分享
预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务