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到首地址+R−1.
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
#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位取反。