1.序列式(容器内的元素没有什么关系)
(1)vector(动态数组)
①创建
//不带参数(1种)
vector<int> v1;
//带参数(4种)
vector<int> v1 = {0,1,2,3};
vector<int> v2(3,10); //含3个10
vector<int> v3(指针1,指针2);
vector<int> v4(v1); //创建和v1一样的vector
②赋值(assign)
//assign(指针1,指针2);
v1.assign(v2.begin(),v2.end()); //左闭右开
//assign(n,elem);
v2.assign(3,10); //3个10
//assign(arr,arr+n);
int arr[] = {0, 1, 2, 3, 4};
v3.assign(arr,arr+5);
//swap(v1,v2);
swap(v1,v2); //更换v1、v2
③容量(size)
int len = v1.size();
④判空(empty)
v.empty(); //空返回true,否者返回false
⑥尾插(push_back)
v.push_back();
⑦尾删(pop_back)
v.pop_back();
⑧长赋值,短截断(resize)
v1.resize(10); //多出的部分自动补零
v1.resize(15,1); //增加的部分赋值为1
⑨排序(sort)
sort(v1.begin(),v1.end());
sort(v1.begin(),v1.end(),greater<int>()); //逆序
⑩头尾
v.front();
v.back();
⑩①清空
v.clear();
暂且说这几个常用的。
(2)deque,双端队列
和vector几乎差不多,就多了个前插和前删。
①前插
v.push_front();
②前删
v.pop_front();
(3)list,链表
不常用。
(4)stack,栈
①创建
stack<int>sk;
②插入
sk.push(10); //栈顶插入元素10
③删除
sk.pop(); //弹出栈顶元素10
④栈顶
sk.top();
⑤大小
sk.size();
⑥判空
sk.empty(); //空返回true,非空返回false
(5)queue,队列
①创建
queue<int>q;
②头尾
q.front();
q.back();
③插入
q.push(10);
q.push(9);
④删除
q.pop(); //删除10
⑤大小
q.pop();
⑥判空
q.empty();
2.关联式(容器内的元素有关系,如大小关系、重复性等)
(1)set,集合
①创建
set<int> st;
②插入
st.insert(2); //插入值为2的元素
③删除
st.erase(2);
④容量
st.size();
⑤查找
st.find(2); //若找到则返回该处的迭代器,否则返回st.end()迭代器
st.lower_bound(x); //二分查找小于等于x的元素最小的一个,并返回指向该元素的迭代器
st.upper_bound(x); //二分查找大于x的元素最小的一个,并返回指向该元素的迭代器
⑥元素个数
int num;
num = st.count(2);
⑦判空
st.empty();
⑧清空
st.clear();
(2)priority_queue,大根堆,小根堆
①创建
priority_queue<int> q1; //创建大根堆
priority_queue<int, vector<int>, greater<int>> q2; //创建小根堆
②插入
q1.push(2); //把2插入堆(自动排序)
③删除
q1.pop(); //删除堆顶元素
④堆顶
q1.top();
⑤容量
q1.size();
⑥判空
q1.empty();
(3)map
元素按照键的大小排列。
①创建
map<int,int>mp;
②键值
iter->first;
iter->second;
③插入
map[2] = 5;
mp.insert(pair<int,int>(2,5));
④删除
ap.erase(iter); //删除迭代器所指的键值对
⑤查找
mp.fine(2); //查找键为2的元素,返回指向该处的迭代器
⑥判空
mp.empty();
⑦清空
mp.clear();
(4)unordered_map,哈希表
和map一样,但是元素没有排序。
目前经常用到的就这些,后面要是用到别的再补充。