常用的STL容器

STL容器很多,每一个容器就是一个类模板

一、容器种类

①顺序容器
②适配器容器
③关联容器

二、适配器容器

适配器容器是指基于其他容器其底层容器,也就是说适配器容器包含另一个容器作为底层容器,在底层容器的基础上实现适配器容器的功能,实际上在算法设计中可以将适配器容器作为一般容器来使用。STL提供的适配器容器如下:
(1) stack( 栈容器)
①它是一个栈类模板,和数据结构中的栈一样,具有后进先出的特点。栈容器默认的底层容器是deque。用户也可以指定其他底层容器,例如以下语句指定myst栈的底层容器为vector

stack<string,vector<string>> myst;//第二个参数指定底层容器为vector

②stack容器中只有一个出口,即栈顶,可以在栈顶插入(进栈)和删除(出栈)元素,而不允许顺序遍历,所以stack容器中没有begin()/end()和rbegin()/rend()这样的用于迭代器的成员函数。
③主要成员函数如下:

empty():判断栈容器是否为空
size():返回栈容器中的实际元素个数
push(elem):元素进栈
top():返回栈顶元素
pop():元素出栈

(2)queue(队列容器)
①是一个队列类模板,和数据结构中的队列一样,具有先进先出的特点。queue容器不允许顺序遍历,没有begin()/end()和rbegin()/rend()这样的用于迭代器的成员函数。
②主要成员函数如下:

empty():判断队列容器是否为空
size():返回队列容器中的实际元素个数
front():返回队头元素。
back():返回队尾元素。
push(elem):元素进队
pop():元素出队

(3)priority_queue(优先队列容器)
①是一个优先队列类模板/优先队列是一种具有受限访问操作的存储结构,元素可以以任意顺序进入优先队列。一旦元素在优先队列容器中,出队操作将出队列中优先级最高的元素。
②其主要成员函数如下:

empty():判断优先队列容器是否为空
size():返回优先队列容器中的实际元素个数
push(elem):元素elem进队
top():获取队头元素
pop():元素出队

③优先队列中优先级的搞第是由队列中数据元素的关系函数(比较运算符)确定,用户可以使用默认的关系函数(对于内置数据类型,默认关系函数是值越大优先级越高),也可以重载自己编写的关系函数。
例如以下程序:

#include<stdio.h>
#include<queue>
using namespace std;
int main(){
	priority_queue<int> qu;
	qu.push(3);
	qu.push(1);
	qu.push(2);
	printf("队头元素:%d ",qu.top());
	printf("出队顺序:");
	while(!qu.empty()){
		printf("%d",qu.top());
		qu.pop();
	} 
	printf("\n");
	return 0;
}

执行结果:

队头元素:3 出队顺序:321