- list双向链表
- stack栈(后进先出)
- queue队列(先进先出)
- priority_queue优先队列
- deque双端队列
容器共用特征:
.begin() //起始地址
.end() //末尾的后一位的地址(最后一位元素的下一位的地址)
.size()//返回元素个数,无符号整型
.swap(b) // 序列交换
::iterator //迭代器(广义指针)
list<int>::iterator it;
list<int> a;
for(it = a.begin();it<a.end();it++)
{
cout << *it << endl;
}
void outint(int n) {cout<<n<<endl;}
for_each(a.begin(),a.end(),out);
1.list
双向链表,可以在固定的时间插入,不支持数组表示法和随机访问
专用成员函数:
merge(x):将链表x与调用链表合并,合并前两个链表必须已经排序,合并后经过排序的链表保存在调用链表中,x为空;
remove(val):从链表中删除所有val的实例;
sort():对链表进行排序;
splice(pos,x):将链表x插入(粘接)到pos的前面,x将为空;
unique():将连续的相同元素压缩为单个元素。(想去重先排序)
其他成员函数:
.front()//第一个元素
.back()//最后一个元素
.push_front()//从前压入一个元素
.push_back()//从后压入
.pop_front()//从前破坏(删除)一个元素
.pop_back()//从后
.insert(p,t)//在p地址前插入一个值,或一个链表,或一个范围.insert(p,a,a+3)
.erase§//擦除
.clear()//清空
list<int>one(q5,2) //赋值5个2
2.stack
栈,只能在栈顶操作,不支持数组表示法和随机访问
成员函数:
push(x):将x压入栈;
pop():删除栈顶;
top():返回指向栈顶元素的引用;
size():返回栈中元素个数;
empty():判断栈空,若为空,返回true。
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int>s;
for(int i=1;i<=5;i++)
{
s.push(i);
}
cout<<s.top()<<endl<<endl;
cout<<s.size()<<endl<<endl;
while(!s.empty())
{
cout<<s.top()<<endl;
s.pop();
}
return 0;
}
3.queue
队列
#include<iostream>
#include<queue>
using namespace std;
int main()
{
queue<int>q;
for(int i=1;i<=5;i++)
q.push(i);
cout<<q.front()<<endl<<endl;
cout<<q.size()<<endl<<endl;
while(!q.empty())
{
cout<<q.front()<<endl;
q.pop();
}
return 0;
}
4.priority_queue
优先队列,按照优先级出队,默认越大越优先,不支持数组表示法和随机访问
成员函数:
push(x):将x插入队中;
pop():删除队头;
top():返回指向队头元素的引用;
size():返回队中元素的个数;
empty():判队空,若为空,返回true.
5.deque
双端队列,可以在两端进出队,支持数组表示法和随机访问。经常在序列两端操作时使用该函数。类似vector。
成员函数:
push_front(x)/push_back(x) // 从队头队尾入队;
pop_front(x)/pop_back(x) // 从队头队尾出队;
front()/back() // 返回指向队头/队尾元素的引用;
size():返回队中的元素个数;
empty():判队空,若为空,返回true;
clear():清空队列。