stack
类
一种模板容器适配器类,它提供了功能的限制,限制对最近添加到某些基础容器类型的元素的访问。 当需要明确仅在容器上执行 stack
时,使用 stack
类。
语法
template <class Type, class Container= deque <Type>>
class stack
参数
Type
要存储在堆栈中的元素数据类型。
Container
用来实现堆栈的基础容器的类型。 默认值为 deque<Type>
类。
注解
堆栈对象的第一个模板参数中规定的 Type
的元素与 value_type
同义,并且必须与第二个模板参数规定的基础容器类 Container
中的元素类型相匹配。 Type
必须是可赋值的,这样才能复制该类型的对象并为该类型的变量赋值。
适合堆栈的基础容器类包括 deque
、list
类和 vector
类,或任何其他支持 back
、push_back
和 pop_back
操作的序列容器。 基础容器类封装在容器适配器中,容器适配器仅公开一组有限的序列容器成员函数为公共接口。
当且仅当 Type
类的元素可进行相等比较时,stack
对象才可进行相等比较;当且仅当 Type
类的元素可进行小于比较时,该对象才可进行小于比较。
stack
类支持后进先出 (LIFO) 数据结构。 可以在脑海中将其类比为一摞盘子。 元素(盘子)只能从堆栈顶部(基容器末尾的最后一个元素)插入、检查或删除。 限制仅访问顶部元素是使用stack
类的原因。queue
类支持先进先出 (FIFO) 数据结构。 可以在脑海中将其类比为排队等候银行柜员的人。 元素(人)可从行的后部添加,并且可以从行的前部删除。 行的前部和后部都可以插入。 以这种方式限制仅访问前部和后部元素是使用queue
类的原因。priority_queue
类将对其元素进行排序,以便最大的元素始终位于顶部位置。 它支持元素的插入以及顶部元素的检查和删除。 可以在脑海中将其类比为按年龄、身高或其他标准排队的人。
成员
构造函数
名称 | 描述 |
---|---|
stack |
构造一个空的或者是基容器对象副本的 stack 。 |
Typedef
名称 | 描述 |
---|---|
container_type |
一种类型,它提供将由 stack 采用的基容器。 |
size_type |
可表示 stack 中元素数量的无符号整数类型。 |
value_type |
一种类型,它表示存储为 stack 中元素的对象的类型。 |
函数
名称 | 描述 |
---|---|
empty |
测试 stack 是否为空。 |
pop |
从 stack 的顶部删除元素。 |
push |
将元素添加到 stack 顶部。 |
size |
返回 stack 中的元素数量。 |
top |
返回对 stack 顶部元素的引用。 |
container_type
一种类型,它提供将调整的基容器。
typedef Container container_type;
备注
该类型是模板参数 Container
的同义词。 所有三个 C++ 标准库序列容器类(vector
类、list
类和默认deque
)都满足用作 stack
对象的基容器的要求。 也可能使用满足要求的用户定义的类型。
有关 Container
的详细信息,请参阅 stack
类主题的“备注”部分。
示例
有关如何声明和使用 container_type
的示例,请参阅 stack::stack
的示例。
empty
测试堆栈是否为空。
bool empty() const;
返回值
如果堆栈为空,则返回 true
,如果堆栈为非空,则返回 false
。
示例
// stack_empty.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
// Declares stacks with default deque base container
stack <int> s1, s2;
s1.push( 1 );
if ( s1.empty( ) )
cout << "The stack s1 is empty." << endl;
else
cout << "The stack s1 is not empty." << endl;
if ( s2.empty( ) )
cout << "The stack s2 is empty." << endl;
else
cout << "The stack s2 is not empty." << endl;
}
The stack s1 is not empty.
The stack s2 is empty.
pop
从堆栈的顶部删除元素。
void pop();
备注
堆栈必须为非空才能应用成员函数。 堆栈顶部是最近添加的元素所占据的位置,并且是容器末尾处的最后一个元素。
示例
// stack_pop.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1, s2;
s1.push( 10 );
s1.push( 20 );
s1.push( 30 );
stack <int>::size_type i;
i = s1.size( );
cout << "The stack length is " << i << "." << endl;
i = s1.top( );
cout << "The element at the top of the stack is "
<< i << "." << endl;
s1.pop( );
i = s1.size( );
cout << "After a pop, the stack length is "
<< i << "." << endl;
i = s1.top( );
cout << "After a pop, the element at the top of the stack is "
<< i << "." << endl;
}
The stack length is 3.
The element at the top of the stack is 30.
After a pop, the stack length is 2.
After a pop, the element at the top of the stack is 20.
push
将元素添加到堆栈顶部。
void push(const Type& val);
参数
val
添加到堆栈顶部的元素。
备注
堆栈顶部是最近添加的元素所占据的位置,并且是容器末尾处的最后一个元素。
示例
// stack_push.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1;
s1.push( 10 );
s1.push( 20 );
s1.push( 30 );
stack <int>::size_type i;
i = s1.size( );
cout << "The stack length is " << i << "." << endl;
i = s1.top( );
cout << "The element at the top of the stack is "
<< i << "." << endl;
}
The stack length is 3.
The element at the top of the stack is 30.
size
返回堆栈中元素数。
size_type size() const;
返回值
堆栈的当前长度。
示例
// stack_size.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1, s2;
stack <int>::size_type i;
s1.push( 1 );
i = s1.size( );
cout << "The stack length is " << i << "." << endl;
s1.push( 2 );
i = s1.size( );
cout << "The stack length is now " << i << "." << endl;
}
The stack length is 1.
The stack length is now 2.
size_type
一种无符号整数类型,此类型可表示堆栈中的元素数。
typedef typename Container::size_type size_type;
备注
类型为堆栈采用的基容器的 size_type
的同义词。
示例
有关如何声明和使用 size_type
的示例,请参阅 size
的示例。
stack
构造一个空的堆栈或者是基容器类副本的堆栈。
stack();
explicit stack(const container_type& right);
参数
right
所构造堆栈要成为其副本的矢量。
示例
// stack_stack.cpp
// compile with: /EHsc
#include <stack>
#include <vector>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
// Declares stack with default deque base container
stack <char> dsc1;
//Explicitly declares a stack with deque base container
stack <char, deque<char> > dsc2;
// Declares a stack with vector base containers
stack <int, vector<int> > vsi1;
// Declares a stack with list base container
stack <int, list<int> > lsi;
// The second member function copies elements from a container
vector<int> v1;
v1.push_back( 1 );
stack <int, vector<int> > vsi2( v1 );
cout << "The element at the top of stack vsi2 is "
<< vsi2.top( ) << "." << endl;
}
The element at the top of stack vsi2 is 1.
top
返回对堆栈顶部元素的引用。
reference top();
const_reference top() const;
返回值
对堆栈顶部容器中的最后一个元素的引用。
注解
堆栈必须为非空才能应用成员函数。 堆栈顶部是最近添加的元素所占据的位置,并且是容器末尾处的最后一个元素。
如果将 top
的返回值分配给 const_reference
,则无法修改 stack
对象。 如果将 top
的返回值分配给 reference
,则可以修改 stack
对象。
示例
// stack_top.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1;
s1.push( 1 );
s1.push( 2 );
int& i = s1.top( );
const int& ii = s1.top( );
cout << "The top integer of the stack s1 is "
<< i << "." << endl;
i--;
cout << "The next integer down is "<< ii << "." << endl;
}
The top integer of the stack s1 is 2.
The next integer down is 1.
value_type
一种类型,它表示存储为堆栈中元素的对象类型。
typedef typename Container::value_type value_type;
注解
类型为堆栈采用的基容器的 value_type
的同义词。
示例
// stack_value_type.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
// Declares stacks with default deque base container
stack<int>::value_type AnInt;
AnInt = 69;
cout << "The value_type is AnInt = " << AnInt << endl;
stack<int> s1;
s1.push( AnInt );
cout << "The element at the top of the stack is "
<< s1.top( ) << "." << endl;
}
The value_type is AnInt = 69
The element at the top of the stack is 69.