string类
vector 向量 ->不定长数组
#include
vector<元素类型>
方法一
vector<int> v1;
vector<vector<int>> v2;
vector<vector<vector<int>>> v3;
方法二
vector<int> v1(5,10);
vector<vector<int>> v2(5,vector<int>(5,10));
vector<vector<vector<int>>> v3(5,vector<int>(5,vector<int>(5,10)))
尾插
v.push_back(123);
尾删
v.pop_back();
insert(iter,value)
insert(iter,num,value)
参数不支持下标
返回新插入值的迭代器
v.insert(v.begin()+3,666);
//在第3个位置插入666
v.insert(v.begin()+6,6,6);
//在第6个位置插入6个6
eraser(iter)
eraser(first_iter,last_iter)
参数不支持下标
v.erase(v.begin()+3);
//删除第3个位置的值
v.erase(v.begin()+1,v.begin()+6);
//删除第1-6个位置的值
//全删
v.clear()
//获取头尾迭代器
v.begin();
v.end();
v.rbegin();
v.rend();
//vector允许使用索引
v[n]=0;
v.at(index);
//返回第一个元素的值
v.front();
//返回最后一个元素的值
v.back();
//判断是否为空
v.empty();
//修改长度
v.resize(len);
//获取长度
v.size();
//交换
v.swap(v2)
list 列表 ->双向链表
#include
list<元素类型>
list<int> l1;
list<int> l2{1,2,3,4,5,6};
insert(iter,value)
insert(iter,num,value)
参数不支持下标
l.insert(l.begin()+3,666);
//在第3个位置插入666
l.insert(l.begin()+6,6,6);
//在第6个位置插入6个6
头插
l.push_front(123);
尾插
l.push_back(123);
eraser(iter)
eraser(first_iter,last_iter)
参数不支持下标
l.erase(l.begin()+3);
//删除第3个位置的值
l.erase(l.begin()+1,l.begin()+6);
//删除第1-6个位置的值
头删
l.pop_front();
尾删
l.pop_back();
list
没有clear()
//获取头尾迭代器
l.begin();
l.end();
//返回第一个元素的值
l.front();
//返回最后一个元素的值
l.back();
//判断是否为空
l.empty();
//修改长度
l.resize(len);
//获取长度
l.size();
//交换
l.swap(v2)
Stack->栈
栈 先进后出
#include
stack<元素类型>
stack<int> st;
参数不支持下标
st.push(666);
//666入栈
st.pop();
//出栈
//获取头尾迭代器
st.begin();
st.end();
//返回头元素
st.top();
//判断是否为空
st.empty();
//获取长度
st.size();
//交换
st.swap(st2)
Queue->队列
队列 先进后出(FIFO)
#include
queue<元素类型>
queue<int> q;
参数不支持下标
q.push(666);
//666入队列
q.pop();
//出队列
//获取头尾迭代器
q.begin();
q.end();
//返回第一个元素的值
q.front();
//返回最后一个元素的值
q.back();
//判断是否为空
q.empty();
//获取长度
q.size();
//交换
q.swap(q2)
priority_queue->优先队列
#include
底层原理是二叉堆
priority_queue<元素类型, 底层容器, 比较器>
priority_queue<int> pq;
priority_queue<int,vector<int>,less<int>> pq;//默认
priority_queue<int,vector<int>,greater<int>> pq;
参数不支持下标
pq.push(666);
//666入队列
pq.pop();
//出队列
//获取头尾迭代器
pq.begin();
pq.end();
//获取堆顶元素
pq.top();
//判断是否为空
pq.empty();
//获取长度
pq.size();
//交换
pq.swap(pq2)
Set->集合
#include
set
会自动去重和排序
底层原理是红黑树
set<元素类型,比较器>
set<int> s;
set<int,less<int>> s;//默认
set<int,greater<int>> s;
参数不支持下标
//666插入集合 自动去重
s.insert(666);
//删除200这个元素
s.erase(s.find(200));
//查找200这个元素 返回迭代器
s.find(200);
//查找200这个元素 返回元素数量
s.count(200);
//获取头尾迭代器
s.begin();
s.end();
//判断是否为空
s.empty();
//获取长度
s.size();
//交换
s.swap(s2);
Map->字典dictionary
#include
底层原理是红黑树
map<键类型,值类型,比较器>
map<char,int> m;
map<char,int,less<int>> m;//默认
map<char,int,greater<int>> m;
m['a']=123;
//注意
//运行 m['b']
//如果键'b'不存在
//那么自动新增这个键,值为0
//删除键为'a'的元素
m.erase(s.find('a'));
//查找'a'这个键 返回迭代器
m.find('a');
//查找'a'这个键 返回元素数量
m.count('a');
//获取头尾迭代器
m.begin();
m.end();
//判断是否为空
m.empty();
//获取长度
m.size();
//交换
m.swap(m2);
pair->数对
#include
太简单不想讲
pair<第一个元素类型,第二个元素类型>
pair<int,int> p;
pair<int,int> p={1,2};
p.first=1;
p.second=2;
p.first;
p.second;
适用于vector
等支持下标的容器
for (int i = 0; i < a.size(); i++){
cout << a[i] << endl;
}
几乎都适用
for (vector<int>::iterator it = a.begin(); it != a.end(); ++it){
cout << *it << endl;
}
几乎都适用
for (auto p:a){
cout << *p << endl;
//map要这样写
//cout << p.first << ' ' << p.second << endl;
//因为p是pair类型
}
千万不要在遍历中随便修改容器