C++ STL概念之 序列式容器2(stack / queue / priority_queue)

stack常用接口

push

void push (const value_type& val);
void push (value_type&& val);
  1. **void push(const value_type& val);**
    这个版本的 push 方法接受一个对现有对象的常量引用作为参数。它是传统的推入方法,适合在你已经有一个对象,并想要将其加入到栈中时使用。在这个方法中,传入的参数 val 被视为一个左值,意味着在推入栈之前,会发生一次复制操作。这是因为栈管理其内容的副本,而不是直接管理原始对象。

  2. **void push(value_type&& val);**
    这个版本的 push 方法接受一个右值引用作为参数,允许使用移动语义。如果你有一个即将销毁的临时对象,或者你希望将一个对象转移进栈中以避免复制开销,这个方法更合适。当传入的参数是一个右值时(例如,一个返回临时对象的函数调用的结果),可以进行移动操作而不是复制。移动操作通常更快,因为它只涉及转移资源的所有权,而不是复制整个对象的数据。

pop

void pop();

用于移除栈顶的元素。此方法不返回被移除的元素的值,仅仅是从栈中删除了栈顶元素。

top

reference top();
const_reference top() const;

用于访问栈顶的元素。也就是说,这个方法返回一个对栈顶元素的引用,但并不会从栈中移除该元素。

  1. **reference top();**
    这个版本返回一个可修改的引用(非常量引用)到栈顶的元素。你可以用这个引用来改变栈顶元素的值。
  2. **const_reference top() const;**
    这个版本是在stack对象为常量时使用的,它返回一个常量引用到栈顶的元素。这意味着只可以查看元素的值,但不能修改它。

empty

bool empty() const;

用于检查栈是否为空。如果栈中没有任何元素,则该方法返回 true;否则,返回 false。此方法是 const 的,表示它不会修改调用它的对象。

返回值

  • true: 当栈中没有元素时。
  • false: 当栈中至少有一个元素时。

size

size_type size() const;

用于返回栈中的元素数量。这个方法告诉存储在栈内的元素总数。

返回值

  • 返回栈中的元素数量。size_type 通常是一个无符号整数类型。

queue常用接口

push

void push (const value_type& val);
void push (value_type&& val);
  1. **void push (const value_type& val);**
    这个版本的push函数接受一个对值的常量引用作为参数,并将该值添加到队列的末尾。这意味着会创建参数的一个副本,并将该副本存储在队列中。

  2. **void push (value_type&& val);**
    这个版本的push函数采用右值引用作为参数,允许从临时对象中移动数据,从而减少不必要的拷贝,提高效率。这在你要添加的对象是临时对象或者无需再次使用的对象时特别有用。

pop

void pop();

用于移除队列的第一个元素,也就是队列中最早加入的元素。

front / back

front

reference& front();
const_reference& front() const;

用来访问队列中的第一个元素,即队列的头部元素。

  1. **reference& front();**
    这个版本的front函数返回一个到队列第一个元素的引用。通过这个引用,你可以直接修改队列头部的元素(当然,这取决于队列中存储的元素类型是否可被修改)。

  2. **const_reference& front() const;**
    这个常量版本的front函数也返回队列中第一个元素的引用,但此引用是常量的,因此你无法通过它来修改队头元素。它通常用于当队列对象本身被声明为const或者你不希望修改队列元素时。

back

reference& back();
const_reference& back() const;

用来访问队列中的最后一个元素,即队列的尾部元素。

  1. **reference& back();**
    这个版本的back函数返回一个到队列最后一个元素的引用,你可以通过这个引用直接修改队列尾部的元素(当然,这也取决于队列中存储的元素类型是否可以被修改)。

  2. **const_reference& back() const;**
    这个版本的back函数也返回后一个元素的引用,但返回的是常量引用,你不能通过这个引用修改队列尾部的元素。这个方法通常在队列对象本身是const或者你不想修改尾部元素时使用。

empty

bool empty() const;

用来检查队列是否为空。

返回值

如果队列没有元素,它将返回true;否则返回false

size

size_type size() const;

用于返回队列中元素的数量。

priority_queue

push

void push (const value_type& val);
void push (value_type&& val);
  1. **void push(const value_type& val);**
    这个重载版本的push函数接受一个对常量的引用作为参数,这意味着函数会通过拷贝构造或赋值运算来保存这个元素到优先队列中。

  2. **void push(value_type&& val);**
    这个重载版本的push函数接受一个右值引用作为参数,允许使用移动语义,它适用于那些即将销毁的临时对象,可以避免不必要的拷贝,提高效率。

pop

void pop();

用于移除优先级队列中优先级最高的元素。在默认情况下,如果优先级队列是用最大堆实现的,pop()会移除最大的元素;如果是用最小堆实现的,则移除最小的元素。

top

const_reference top() const;

返回一个对队列中优先级最高元素的常量引用(const reference),允许你查看顶部元素,但不允许修改它。

  • top() 方法返回的是一个引用,因此它不会创建被访问元素的副本,这使得访问操作非常快。由于是常量引用,因此不能用 top() 来修改队列顶部元素的值。
  • 在调用 top() 方法之前,应该先检查队列是否为空,因为当优先级队列为空时,尝试访问顶部元素可能会导致未定义行为。
  • top() 方法的时间复杂度是 O(1),即它能够在常数时间内返回顶部元素。

empty / size

empty

bool empty() const;

用于检查优先级队列是否为空。如果队列为空,该函数返回 true;否则返回 false。这是一个常量成员函数,不会修改优先级队列的状态。

  • empty() 方法提供了一种安全的方式来检查队列是否含有元素,从而避免在空队列上执行某些操作时可能产生的错误或未定义行为(如调用 top() 或 pop())。
  • empty() 方法的时间复杂度是 O(1),即它可以在常数时间内完成检查操作。
size_type size() const;

 用于返回队列中当前元素的数量。返回值类型是 size_type,这是一个无符号整数类型,能够代表容器中可能的最大尺寸。

  • size() 方法可以让你了解队列中有多少个元素,这对于队列大小的动态监视非常有用。
  • 它是一个常量成员函数,调用时不会改变优先级队列的状态。
  • size() 方法的时间复杂度是 O(1),即它能够在常数时间内返回队列的大小。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值