STL标准库(四) 容器适配器

适配器:将功能类似但接口不同的类转换为另一个统一的接口,类似转换器

常见适配器分为以下三种:

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::container_type).name() << std::endl;

打印栈容器类型发现是class std::deque >,是默认以class _Container = deque<_Ty>容器实现

    std::stack obj; 声明一个栈

栈是一个先进后出,单端操作的结构

    std::stack>obj; 指定栈内部使用vector,不可使用其他不支持类型,但声明并调用该其他类型自己的方法是没有错误的

    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 obj; 默认以class _Container = deque<_Ty>容器实现

    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,std::greater> obj;

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;

}

你可能感兴趣的:(c++,开发语言)