一、vector&deque (唯二支持随机访问的容器)
1.插入:
v.push_back(5);
v.insert(it,5); //在制指定位置插入
v.insert(p,n,t);//在p迭代器位置插入n个t
v.insert(p,b,e);//在p迭代器位置插入b迭代器和e迭代器之间的元素
dq.push_front();
2.删除
v.pop_back();
v.erase(it);
dq.pop_front();
3.排序,查找,二分查找
sort(v,v+5,Mycompare);
find(v,v+5,val); //复杂度为n,返回val所在处的迭代器
binary_search(v,v+5,val);
4.头尾元素,大小/是否为空
v.front();
v.end();
v.size();
v.empty();
5.返回头/尾引用:
v.front();
v.back();
5.清空
v.clear();
二、list
除了一中的3(即需要随机访问迭代器的算法)都支持
多出来的功能:
1.成员函数sort
l.sort(Mycompare)//此处可以用greater<int>,less<int>等
2.删除所有等于value的值
l.remove(val);
3.移除相同元素
l.sort();
l.unique(); //必须先排序再unique才能达到效果
3.合并链表
l1.merge(l2);//被合并的链表l2会被清空
4.翻转链表
l.reverse();
5.在指定位置前面插入另一链表中的一个或多个元素,并在另一链表中删除被插入的元素
p1 = find(lst1.begin(),lst1.end(),3);
p2 = find(lst2.begin(),lst2.end(),200);
p3 = find(lst2.begin(),lst2.end(),400);
lst1.splice(p1,lst2,p2, p3);
//将[p2,p3)插入p1之前,并从lst2中删除[p2,p3)
三、容器适配器
1.stack
stk.push(5);
stk.pop();
stk.top();
stk.empty();
stk.size();
2.queue
q.push();
q.pop();
q.top();
q.front();//与top功能相同
q.back();
q.empty();
q.size();
3.priority_queue
其他用法同queue,差别在声明的时候
#删除函数要求每次删除操作都保证删除为所有元素中最大元素。
priority_queue<int,vector<int>,greater<int> > pq;
声明的时候如果要写比较规则要注意
①必须声明第二个值——构造方式(vector/queue)
②比较方式必须为函数对象或者显式的函数指针
四、set&multiset
1.声明:
注意MyLess是一个函数对象!!
2.成员函数:
注意如果是set,则insert会返回一个pair对象,first为所插入元素等值元素的指针,second为本次插入是否进行。
五、map&multimap:
map/multimap里面存放的都是pair对象。容器按照first(key值进行排序)
1.声明:
2.成员函数:
基本同set,但是要注意
pairs.insert(mmid::value_type(15,2.7));
//multimap里面有定义 :
typedef pair<const Key, T> value_type;
pairs.insert(make_pair(15,2.7));
3.map的特殊用法:
map成员函数[]:
由于map里面一个key值只能有一个,所以可以用[]来进行索引,
声明:文中图片部分截自郭炜老师程序设计与实习课程PPT,版权归郭炜老师所有