STL(部分)

vector

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

定义

//typename 可以是基本数据类型,可以是其它标准stl容器,可以是自定义结构体
vector<typename> name;
vector<int> v1;
vector<vector<int> > v2; //两个维度都是动态的
vector<student> v3(10);//一维固定为10,二维动态

元素访问

//1.下标访问
v[i]
//2.迭代器访问
vector<typename>::iterator it;
auto it;//另一种迭代器简易定义方法
for(auto it = v.begin();it!=v.end();it++)
    cout<<*it;
//迭代器it可以进行算术运算

常用函数

  • 函数 说明
  • push_back(x); 将元素x添加到容器末尾
  • pop_back(); 删除容器末尾元素
  • size(); 获取容器大小
  • clear(); 清空元素
  • insert(it,x); 在it处插入一个元素x
  • erase(it); 删除it处的元素
  • erase(first,last); 删除[first,last)区间内的元素

使用场景

  • 元素个数不确定
  • 用于实现邻接表存储图

set

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

定义

set<typename> name;

元素访问

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

常用函数

  • 函数 说明
  • 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快得多

string

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

定义

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

map

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

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

头文件+定义

#include<map>
using namespace std;
map<typename1,typename2> mp;

元素访问

//1.下标
mp['c']
mp[0]
mp["key"]

//2.迭代器
for(auto it = mp.begin(); it != mp.end(); it++){
	cout<< it->first<<" "<<it->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来排序的需求,速度快

queue

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

头文件+定义

#include<queue>
using namespace std;

queue<typename> name;

常用函数

  • 函数 说明
  • push(x); 元素x入队列
  • front(); 访问队列的首元素
  • back(); 访问队列的尾元素
  • pop(); 队首元素出队
  • empty(); 检测是否为空队列
  • size(); 队列大小

使用场景

  • 广度优先搜索

扩展

  • deque(double end queue,双端队列)首位皆可插入和删除
  • priority_queue,使用堆实现的默认将当前队列最大元素置于队首的容器

priority_queue

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

额外注意

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

参考博客

21.12.7 记:出于根据个人习惯进行整理,便于内容添加的目的,对以下博客进行参考;非常感谢。

博客A

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值