3.5 stack容器
3.5.1 特点:先进后出
3.5.2 stack常用接口
构造函数:
stack<T> stk;//stack采用模板类实现
stack(const stack &stk);
赋值操作:
stack &operator=(const stack &stk);
数据存取:
push(elem);
pop();
top();//返回栈顶元素
大小操作:
empty();
size();
3.6 queue
3.6.1 特点:
先进先出 FIFO
一端进队 一端出队
只有队头队尾能被外界访问 因此不允许遍历行为
从队头出队 队尾入队
3.6.2 queue常用接口
构造函数:
queue<T> que;//采用模板类实现
queue(const queue &que);
赋值操作:
queue &operator=(const queue &que);
数据存取:
push(elem);
pop();
back();//返回最后一个元素
front();//返回第一个元素
大小操作:
empty();
size();
3.6.3 list容器
3.7.1特点
优点:可以对任意位置进行快速插入删除操作
缺点:遍历速度慢 占用空间大
注意:list容器插入和删除操作都不会造成原有list迭代器失效,这在vector是不成立的
总结:list和vector最为常用 STL中为双向链表
3.7.2 list构造函数
函数原型:
1 list<T> lst;
2 list(beg,end);
3 list(n,elem);
4 list(const list &lst);
3.7.3 list复制和交换
函数原型:
1 assign(beg,end);
2 assign(n,elem);
3 list &operator=(const list &lst);
4 swap(lst);
3.7.4 list大小操作
函数原型:
1 size();
2 empty();
3 resize(num);
4 resize(num,elem);
3.7.5 插入和删除
函数原型:
1 push_back(elem);
2 pop_back();
3 push_front();
4 pop_front();
5 insert(pos,elem);
6 insert(pos,n,elem);
7 insert(pos,beg,end);
8 clear();
9 erase(beg,end);
10 erase(pos)'
11 remove(elem);//删除容器中所有与elem值匹配的元素
3.7.6 list数据存取
函数原型:
front();
back();
注意:不可以用[] at 访问
原因:本质链表,不是用连续线性空间存储数据,迭代器也不支持随机访问
3.7.7 反转和排序
函数原型:
reverse();
sort();
3.7.8 案例-自定义类型排序
示例:
bool comparePerson(Person &p1, Person &p2)
{
//年龄相同 按身高降序
if (p1.m_Age == p2.m_Age)
return p1.m_Height > p2.m_Height;
//按照年龄升序 从小到大
return p1.m_Age < p2.m_Age;
}
l.sort(comparePerson);//自定义类型需要指定排序规则 仿函数