stack常用接口
push
void push (const value_type& val); void push (value_type&& val);
**
void push(const value_type& val);
**
这个版本的push
方法接受一个对现有对象的常量引用作为参数。它是传统的推入方法,适合在你已经有一个对象,并想要将其加入到栈中时使用。在这个方法中,传入的参数val
被视为一个左值,意味着在推入栈之前,会发生一次复制操作。这是因为栈管理其内容的副本,而不是直接管理原始对象。**
void push(value_type&& val);
**
这个版本的push
方法接受一个右值引用作为参数,允许使用移动语义。如果你有一个即将销毁的临时对象,或者你希望将一个对象转移进栈中以避免复制开销,这个方法更合适。当传入的参数是一个右值时(例如,一个返回临时对象的函数调用的结果),可以进行移动操作而不是复制。移动操作通常更快,因为它只涉及转移资源的所有权,而不是复制整个对象的数据。
pop
void pop();用于移除栈顶的元素。此方法不返回被移除的元素的值,仅仅是从栈中删除了栈顶元素。
top
reference top(); const_reference top() const;用于访问栈顶的元素。也就是说,这个方法返回一个对栈顶元素的引用,但并不会从栈中移除该元素。
- **
reference top();
**
这个版本返回一个可修改的引用(非常量引用)到栈顶的元素。你可以用这个引用来改变栈顶元素的值。- **
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);
**
void push (const value_type& val);
**
这个版本的push
函数接受一个对值的常量引用作为参数,并将该值添加到队列的末尾。这意味着会创建参数的一个副本,并将该副本存储在队列中。**
void push (value_type&& val);
**
这个版本的push
函数采用右值引用作为参数,允许从临时对象中移动数据,从而减少不必要的拷贝,提高效率。这在你要添加的对象是临时对象或者无需再次使用的对象时特别有用。
pop
void pop();用于移除队列的第一个元素,也就是队列中最早加入的元素。
front / back
front
reference& front(); const_reference& front() const;用来访问队列中的第一个元素,即队列的头部元素。
**
reference& front();
**
这个版本的front
函数返回一个到队列第一个元素的引用。通过这个引用,你可以直接修改队列头部的元素(当然,这取决于队列中存储的元素类型是否可被修改)。**
const_reference& front() const;
**
这个常量版本的front
函数也返回队列中第一个元素的引用,但此引用是常量的,因此你无法通过它来修改队头元素。它通常用于当队列对象本身被声明为const
或者你不希望修改队列元素时。back
reference& back(); const_reference& back() const;用来访问队列中的最后一个元素,即队列的尾部元素。
**
reference& back();
**
这个版本的back
函数返回一个到队列最后一个元素的引用,你可以通过这个引用直接修改队列尾部的元素(当然,这也取决于队列中存储的元素类型是否可以被修改)。**
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);
**
void push(const value_type& val);
**
这个重载版本的push
函数接受一个对常量的引用作为参数,这意味着函数会通过拷贝构造或赋值运算来保存这个元素到优先队列中。**
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),即它能够在常数时间内返回队列的大小。