(三) 容器适配器

容器适配器是一个封装序列容器的类模板。

stack<T>:是一个封装deque<T>容器的适配器类模板,默认实现的是一个后入先出的压入栈。stack<T>模板定义在头文件stack中。

queue<T>:是一个封装deque<T>容器的适配器类模板,默认实现的是一个先入先出的队列。queue<T>模板定义在头文件queue中。

priority_queue<T>:是一个封装vector<T>容器的适配器类模板,默认实现的是一个会对元素排序,从而保证最大元素总在队列最前面的队列。prioriy_queue<T>模板定义在头文件queue中。

1、stack用法详解

和其他序列容器相比,stack是一类存储机制简单、所提供操作较少的容器。stack容器可以提供的一套完整操作:

top():返回一个栈顶元素的引用,类型为T&.如果栈为空,返回值未定义。

push(const T& obj):可以将对象副本压入栈顶。这是通过调用底层容器的push_back()函数完成的

push(T&& obj):以移动对象的方式将对象压入栈顶。通过调用底层容器的有右值引用参数的push_back()函数完成的。

pop():弹出栈顶元素。

size():返回栈中元素的个数。

empty():在栈中没有元素的情况下返回true。

emplace():用传入的参数调用构造函数,在栈顶生成对象。

swap(stack<T>& other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。对于stack对象有一个特例化的全局函数swap()可以使用。

2、queue用法详解

只能访问queue<T>容器适配器的第一个和最后一个元素。只能在容器的末尾添加新元素,只能从头部移除元素。

3、堆用法详解

堆(heaps)不是容器,而是一种特别的数据组织方式。堆一般用来保存序列容器。树是分层排列的元素或节点。每个节点有一个键,它是节点中所保存的对象,就如同链表中的节点。

现在可以定义一个堆:这个堆是一个完全二叉树,每个节点与其子节点位置相对。父节点总是大于或等于子节点,这种情况下被叫作大顶堆,或者父节点总是小于或等于子节点,这种情况下叫做小顶堆。

 

queue操作:queue和stack有一些成员函数类似

front():返回queue中第一个元素的引用。如果queue是常量,就返回一个常引用;如果queue为空,返回值是未定义的。

back():返回queue中最后一个元素的引用。如果queue是常量,就返回一个常引用;如果queue为空,返回值是未定义的。

push(const T& obj):在queue的尾部添加一个元素的副本。这是通过调用底层容器的成员函数push_back()来完成的。

push(T&&obj):以移动的方式在queue的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数push_back()来完成的。

pop():删除queue中的第一个元素。

size():返回queue中元素的个数。

empty():如果queue中没有元素的话,返回true。

emplace():用传给emplace()的参数调用T的构造函数,在queue的尾部生成对象。

swap(queue<T>&other):将当前queue中元素和参数queue中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板swap()来完成同样的操作。

std::deque<double> values {1.5, 2.5, 3.5, 4.5};

std::queue<double> numbers(values);

while (!numbers.empty())

{

    std ::cout << numbers. front() << " "; // Output the 1st element

    numbers. pop();  // Delete the 1st element

}

std::cout << std::endl;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值