适配器:将功能类似但接口不同的类转换为另一个统一的接口,类似转换器
常见适配器分为以下三种:
stack 栈 包含头文件
queue 队列
priority_queue 优先队列
如下是一些栈的应用方法:
obj.push();push_back()
obj.pop(); pop_back()
obj.top()back();
如上应用方法,同样支持的迭代器:vector list deque
以上三种迭代器具有相同的功能,可以使用同一种适配器
但适配器不单单是兼容,可能还是限制
比如vector vec; vec[2] 可以支持数组[]的方式,但是如果使用栈适配器 ,就不能使用该功能
如下一个程序进行演示:
int main()
{
std::cout << typeid(std::stack
打印栈容器类型发现是class std::deque
std::stack
栈是一个先进后出,单端操作的结构
std::stack
for (si ze_t i = 0; i < 5; i++)
{
obj.push(i); 依次弹入值
}
std::cout << obj.size() << std::endl;
for (size_t i = 0; i < 5; i++)
{
std::cout << obj.top() << std::endl; 依次打印该栈元素值
obj.pop(); 依次弹出
}
if (obj.empty())
{
std::cout << "empty" << std::endl;
}
std::cout << obj.size() << std::endl; 获取容器元素个数
system("pause");
return 0;
}
队列特性:尾进头出
以下是队列所拥有的方法:
obj.push(); push_back();
obj.pop(); pop_front();
obj.front();front()
obj.back();back()
支持以上方法的容器: deque list
如下一个程序进行演示:
#include
int main()
{
std::queue
for (size_t i = 0; i < 5; i++) 循环元素入列
{
obj.push(i);
}
std::cout << "size:" << obj.size() << std::endl; 打印元素总数
while (!obj.empty()) 另一种方式的循环打印
{
std::cout << obj.front() << std::endl; 打印头元素
obj.pop(); 弹出头元素
}
std::cout << "size:" << obj.size() << std::endl;
system("pause");
return 0;
}
优先队列:属于队列的一种,默认下,自动排序元素,以vector为容器,内部使用堆排进行排序
#include
int main()
{
std::priority_queue
greater
less
obj.push(10);
obj.push(2);
obj.push(100);
obj.push(55);
obj.push(77);
while (!obj.empty()) 进行测试是否从小到大进行排序的
{
std::cout << obj.top() << std::endl; 打印头元素
obj.pop(); 弹出头元素
}打印结果2 10 55 77 100
system("pause");
return 0;
}