1. vector
向量: 自动改变长度的数组
如果测试数据需要存入数组,但是长度不知道,但又想动态增加数组,不想浪费空间的话,可以用这个,而且亦可以申请未知量为n长度的数组,具体如下:
int n;
cin>>n;
vector<int>v(n);//申请长度可灵活调整
常见操作
假设申请如下
vector<int>v;
v.push_back(x);
加入新数据(从v[0]开始)v.size();
返回数组长度for(int i=0;i<v.size();i++) cout<<v[i]<<endl;
通过下标遍历输出vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++) cout<<*it<<endl;
通过迭代器遍历输出
2. set(主要作用是自动去重并排序)
(ps:如果只想去重,而不排序,考虑用unordered_set
)
(B1064)
集合: 一个内部自动有序且不含重复元素的容器
set<typename> name;
常见操作
insert()
find()
erease()
size()
clear()
访问只能通过迭代器(iterator)访问
如顺序遍历:set<int>::iterator it; for(it=st.begin();it!=st.end();it++) printf("%d",*it)
如逆序遍历:
set<int>::iterator it; for(it=(st.end());it!=st.begin();) { it--; cout<<*it; }
3. string
用于存放和操作大量的字符串,比char使用起来更加方便。
string str
常见操作
str+=
拼接- 直接用
>、<、==
等符号进行比较size()
和length()
返回长度insert()
插入
str.insert(pos,string)
在pos号位置插入字符串string。str.insert(str.begin()+位数 , str1.begin()+位数 , str1.end())
在str开始位置后的某位插入字符串str1中某一段( [ b e g i n + n , e n d ) [begin+n,end) [begin+n,end))的字符串
erase()
删除clear()
清除string中数据substr(pos,len)
求子串find()
replace()
4. map
用于实现不同类型之间的映射。
(如用int对应string)
map<键类型,值类型> mp;
常见操作
find()
erase()
size()
clear()
m.count(key)
:由于map不包含重复的key,因此m.count(key)取值为0,或者1,表示是否包含
5. queue
queue<typename> name ;
队列:遵循先进先出
常见操作
name.push()
入队name.front()
获得队首元素name.back()
获得队尾元素name.pop()
队首元素出队name.empty()
检测队列是否为空,空返回true,false为非空name.size()
返回大小
6. priority_queue
priority_queue <typename> name ;
优先队列(其底层用堆实现)
常用来模拟递归
常见操作
top()
访问队首元素,即堆顶元素name.push()
入队name.pop()
队首元素出队name.empty()
检测队列是否为空,空返回true,false为非空name.size()
返回大小
7. stack
stack<typename> name ;
栈:遵循先进后出
常见操作
name.push()
入栈name.pop()
弹出栈顶元素name.top()
获得栈顶元素name.empty()
检测栈是否为空,空返回true,false为非空name.size()
返回大小
8. pair
可以看作一个内部有两个元素的结构体,且元素类型可以指定。
定义方式:
#include<utility>
using namespace std;
//-----1-----
pair <string,int> name;
name.first="123";
name.second=6;
//-----2-----
pair <string,int> name2("456",7);
//-----3-----
name3=make_pair("hhhhh",666);
常见操作
- 比较大小
常用逻辑符号直接及进行比较,
比较规则是先看first的大小,当first大小相等时再比较second
- 作为map的键值直接插入
mp.insert(pair<string,int>("123",6); mp.insert(make_pair("456",7);
- 用来代替二元结构体机器构造函数,节省编码时间
9. algorithm()
常见操作
-
max()
、min()
和abs()
:分别返回最大值、最小值、绝对值 -
swap(x,y)
:互换x和y的值 -
reverse(it1,it2)
:将数组指针在[it1,it2)之间的元素或容器的迭代器将在该范围内的元素进行反转逆序 -
next_permutation()
给出序列全排序的下一个序列 -
fill(a,a+x,num)
给数组类型对应范围赋予任意值 -
sort()
排序不写比较函数,默认递增排序:
sort(a,a+x);
借助cmp比较函数,定制比较规则:
bool cmp(int a, int b){ //从大到小排 return a>b; //当a>b时,把a放在b的前面 }
结构体数组排序:
结构体定义struct node{ int x,y; }ssd[10];
若先按照结构体中x从大到小排序,如果相等,再按照y来排序
bool cmp(node a, node b){ if(a.x != b.x) return a.x > b.x; else return a.y > b.y; //如果相等,再按照y来排 }