c语言栈 stl 常用函数,【pat】C++之刷题常用STL容器整理

1.vector

动态数组,方便的动态扩容,方便的变量初始化(int类型默认初始化为0,bool默认初始化为false),可以用来实现邻接表(结点数太多的图)。

头文件

#include

using namespace std;

定义

//typename 可以是基本数据类型,可以是其它标准stl容器,可以是自定义结构体

vector name;

vector v1;

vector > v2; //两个维度都是动态的

vector v3(10);//一维固定为10,二维动态

元素访问

//1.下标访问

v[i]

//2.迭代器访问

vector::iterator it;

auto it;//另一种迭代器简易定义方法

for(auto it = v.begin();it!=v.end();it++)

cout<

//迭代器it可以进行算术运算

常用函数

函数

说明

push_back(x);

将元素x添加到容器末尾

pop_back();

删除容器末尾元素

size();

获取容器大小

clear();

清空元素

insert(it,x);

在it处插入一个元素x

erase(it);

删除it处的元素

erase(first,last);

删除[first,last)区间内的元素

使用场景

元素个数不确定

用于实现邻接表存储图

2.set

内部自动有序且不含重复元素的集合。

头文件

#include

using namespace std;

定义

set name;

元素访问

for(auto it = v.begin();it!=v.end();it++)

cout<

常用函数

函数

说明

insert(x);

将元素x插入set容器中,并自动递增排序和去重

find(value);

查找值为value的元素,返回对应迭代器

erase(it);

删除it处的元素,通常结合find函数使用

erase(value);

删除值为value的元素

erase(first,last);

删除[first,last)区间内的元素

size();

返回容器大小

clear();

清空容器

使用场景:

自动去重并按升序排序

扩展:

需要元素不唯一,使用multiset

需要元素不排序,unordered_set(內部以散列代替了set内部的红黑树),速度比set快得多

3.string

字符串,可以替换为C语言版的字符数组(str.c_str();)。

头文件

#include

using namespace std;

定义

string str;

内容访问

//1.下标访问

str[i]

//2.输入输出只能用cin和cout,除非转化为字符数组

//3.迭代器访问

常用函数

函数

说明

operator+=

字符串拼接

compare operator

按照字典序比较大小

length()/size()

获取字符串大小

insert(pos,str);

pos是int类型,表示在指定位置插入str

insert(it,first,last);

在it处插入[first,last)范围内的字符串

erase(it);

删除it处的元素

erase(first,last);

删除[first,last)范围内的元素

erase(pos,length);

删除pos位置开始的length个字符

clear();

清空字符串

substr(pos,len);

返回从pos位置开始len长度的字符串

string::npos

作为find函数未找到的判断依据

find(str);

返回str第一次出现的位置

replace(pos,len,str2);

从pos位置开始,长度为len的子串替换为str2

4.map

将任何基本类型映射到任何基本类型(包括STL容器)。

可以用于hash散列(当元素个数比较多时,不适合用数组散列,就用map)

头文件及定义

#include

using namespace std;

map mp;

元素访问

//1.下标

mp['c']

mp[0]

mp["key"]

//2.迭代器

for(auto it = mp.begin(); it != mp.end(); it++){

cout<< it->first<second;

}

常用函数

函数

说明

find(key);

返回键为key的映射的迭代器

erase(it);

删除it处的元素

erase(key);

删除key

erase(first,last);

删除[first,last)区间内的元素

size();

返回容器大小

clear();

清空容器

使用场景:

散列表

其他映射

扩展:

多映射,即一个key对应多个value,使用multimap

unordered_map可以替代map,内部实现使用散列代替了map内部的红黑树实现,用于处理只映射而不需要按key来排序的需求,速度快

5.queue

队列,先进先出的容器,常用于广度优先搜索

头文件及定义

#include

using namespace std;

queue name;

常用函数

函数

说明

push(x);

元素x入队列

front();

访问队列的首元素

back();

访问队列的尾元素

pop();

队首元素出队

empty();

检测是否为空队列

size();

队列大小

使用场景

广度优先搜索

另外,需要注意使用front(),back(), pop()函数前,必须判断是否为空队列(使用empty函数)

扩展

deque(double end queue,双端队列)首位皆可插入和删除

priority_queue,使用堆实现的默认将当前队列最大元素置于队首的容器

6.priority_queue

优先队列,默认情况下是将队列中最大元素置于队首,优先级可以自定义。每次进行push(),pop()操作,底层的数据结构堆(heap)都会随时调整结构,使优先级最高的元素永远都在队首。

头文件及定义

#include

using namespace std;

priority_queue name;

常用函数

函数

说明

push(x);

将元素x入队

top();

访问队首元素

pop();

将队首元素出队

empty();

检测是否为空队列

size();

返回队列大小

优先级设定

基本数据类型(int,double,char)默认数字大或者字典序大的优先级高。

priority_queue,greater> q;

greater表示这个数字越小,优先级越高

less表示数字越大,优先级越高(默认情况)

vector表示底层数据结构堆(heap)的容器

结构体优先级设置

#include

#include

#include

using namespace std;

struct fruit{

string name;

int price;

friend bool operator < (fruit f1,fruit f2){

return f1.price > f2.price;

}

}f1,f2,f3;

int main(){

priority_queue q;

f1.name = "桃子";

f1.price = 3;

f2.name = "梨子";

f2.price = 4;

f3.name = "苹果";

f3.price = 1;

q.push(f1);

q.push(f2);

q.push(f3);

cout<< q.top().name<

return 0;

}

output:

苹果 1

使用场景

可以用于dijkstra算法的顶点选择中

注意使用top()函数之前判断队列是否为空(使用empty()函数)

7.stack

栈,先进后出

头文件及定义

#include

using namespace std;

stack name;

常用函数

函数

说明

push(x);

元素x入栈

top();

获取栈顶元素

pop();

栈顶元素出栈

empty();

检测stack是否为空

size();

获取栈的大小

使用场景

递归模拟,防止递归深度过深,深度优先搜索模拟。

8.pair

头文件及使用

#include

using namespace std;

//map实现中涉及pair,使用map时自动添加了该头文件

pair name;

pair p("hahahah",7);

make_pair("haha",4);

cout<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值