c++常用STL容器

vector:动态数组

定义:vector通过倍增实现申请动态内存,也可以使用vector< int >a(x),申请一个x大小的内存。如果使用vector< int >a(x,1)还可以申请的同时使数组的所有元素初始化为1.
用法:
size() 返回元素个数。
empty() 返回是否为空
clear() 清空
front() 返回头部元素
back() 返回尾部元素
begin() 返回vector数组的第0个元素
end() 返回vector数组最后一个元素下标的下一个下标
erase:删除 首 地 址 + l 到 首 地 址 + R − 1 首地址+l到首地址+R-1 +l+R1.
在这里插入图片描述
在这里插入图片描述
unique:使数组去重返回地址,与首地址做差可得到元素个数。
在这里插入图片描述
对于vector的unique:
在这里插入图片描述

遍历:

在这里插入图片描述
支持字典序比较
在这里插入图片描述
此处a数组为4个“3”,b数组为3个“4”,显然a的字典序小,故输出:
在这里插入图片描述

pair<int ,int>

定义:pair里的参数可以是任意的,比如定义为pair<int ,string> p;第一个元素是p.first,第二个元素是p.second。初始化可以表示为p={20,“abc”}。 同样支持字典序比较

string 字符串

定义:储存字符串。
用法
size() // length() 返回字符串长度。
empty() 返回是否为空
clear() 清空
substr() 返回子串
c_str() 返回字符串的起始地址
支持字符加减运算
在这里插入图片描述
在这里插入图片描述
substr(子串的起始索引,子串长度) 在这里插入图片描述
在这里插入图片描述
当想求的子串长度超过原子串长度,便从索引值输出字符串到最后。
在这里插入图片描述
在这里插入图片描述
也可以把第二个参数删掉,也是可以返回从索引值到最后的子串:
在这里插入图片描述
在这里插入图片描述

queue 队列

用法
size() 返回元素个数
empty() 判断是否为空
push() 向队尾插入一个元素
front() 返回队头元素
back() 返回队尾元素
pop() 弹出队头元素
清空队列:再构造一个。
在这里插入图片描述

priority_queue 优先队列

定义:头文件需要—#include< queue >。优先队列默认为大根堆,如果定义为小根堆的话,可以把x插入为-x:
在这里插入图片描述
也可以使用一个头文件#include
在这里插入图片描述
使用:priority_queue<int,vector,greater> heap;

用法
push() 插入一个元素
top() 返回堆顶元素
pop() 弹出堆顶元素
在这里插入图片描述
输出1 2 3 4
若改成 > return < 则为大根堆

stack 栈

用法:
push() 向栈顶插入一个元素
top() 返回栈顶元素’
pop() 弹出栈顶元素
empty() 判断是否为空
size() 返回元素大小

deque 双端队列

用法
size() 返回尺寸大小
empty() 判断是否为空
clear() 清空
front() 返回队头元素
back() 返回队尾元素
push_back/pop_back() 队尾插入||弹出
push_front()/pop_front() 队头插入||弹出
begin()/end() 返回队列的第0个元素 || 返回队列最后一个元素下标的下一个下标

set < int > S

定义区别:忽略读入重复元素。
用法
begin()/end() 迭代器——支持++,–运算操作,返回前驱和后继。
size() 返回尺寸大小-o1
empty() 判断是否为空-o1
clear() 清空-o1
insert() 插入一个数-nlogn
find() 查找一个数——如果不存在返回end()迭代器(定义如之前的STL)-nlogn
count() 返回某一个数的个数——0或1
erase()
{
1.输入一个数x,删除所有x。-o(k+logn)
2.输入一个迭代器,删除这个迭代器
}-set里面这两个没有区别。
lower_bound()/upper_bound()
{
lower_bound(x) 返回大于等于x的最小的迭代器。
upper_bound(x) 返回大于x的最小的迭代器。
}

遍历:

set<string>::iterator it;
    for(it=s.begin();it!=s.end();it++)
        cout<<*it<<endl;

multiset MS

定义区别:允许出现重复元素。
用法
count() 返回某一个数的个数——多个
erase()
{
1.输入一个数x,删除所有x
2.输入一个迭代器,删除这个迭代器
}-multiset里面这两个有区别。
其他用法同set。

map<int ,int>

定义:map是一种映射,内部实现是平衡树。第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可以称为该关键字的(value);
用法:
insert() 插入两个数。
erase() 输入两个数或者迭代器。
find() 查找一个元素
mp.count()是否存在某个元素,返回0或1
使用:引入#include的头文件。可以当做一个数组使用,下标是第一个参数,返回值是第二个参数——O(logn)
在这里插入图片描述
在这里插入图片描述
遍历:树种统计

#include<bits/stdc++.h>
using namespace std;
#define maxn 1000010
map<string,int>mp;
int main(){
	int n;
	cin>>n;
	getchar();
	for( int i=0; i<n; i++ )
	{
		string str;
		getline(cin,str);
		mp[str]++;
	}
	for( map<string,int >::iterator it = mp.begin(); it!=mp.end(); it++ )
	{ 
		cout<<it->first<<' ';
		double num=0;
		num=it->second*100.0/n;//int乘100.0/int 为double
		printf("%.4f%\n",num);
	}
	return 0;
}

unordered_xxx容器

和上面类似,增删改查复杂度O(1)
不支持lower_bound//upper_bound(),迭代器的运算…

bitset 压位

定义:省内存压位——假如开bool[1024]需要1024 字节的内存。如果让每一个字节存八位,那么只需要开128字节的内存。
用法
声明——bitset<10000> s 里面的数是个数,定义长度是10000的bitset。
位运算——~,&,|,^,==,!=,[]…
count() 返回有多少个1。
any() 判断是否至少有一个1——true。
none() 判断是否全为0——true。
set() 把所有位置变成1.
set(k,v) 将第k位变成v。
reset() 把所有位变成0。
flip() 等价于取反(~)。
flip(k) 把第k位取反。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值