Library: Containers
Does not inherit
A container adapter that behaves like a stack (last in, first out)
#include <stack>
namespace std {
template <class T, class Container = deque<T> >
class stack;
}
The stack container adapter causes a container to behave like a last- in, first-out (LIFO) stack. The last item put (pushed) onto the stack is the first item removed (popped off). The stack can adapt any container that includes the operations back(), push_back(), and pop_back(). In particular, deque, list, and vector can be used.
namespace std {
template <class T, class Container = deque<T> >
class stack {
public:
// Typedefs
typedef typename Container::value_type value_type;
typedef typename Container::size_type size_type;
typedef Container container_type;
// Constructor
explicit stack(const Container& = Container());
// Accessors
bool empty() const;
size_type size() const;
value_type& top();
const value_type& top() const;
void push(const value_type&);
void pop();
};
// Nonmember Operators
template <class T, class Container>
bool operator==(const stack<T, Container>&,
const stack<T, Container>&);
template <class T, class Container>
bool operator!=(const stack<T, Container>&,
const stack<T, Container>&);
template <class T, class Container>
bool operator<(const stack<T, Container>&,
const stack<T, Container>&);
template <class T, class Container>
bool operator>(const stack<T, Container>&,
const stack<T, Container>&);
template <class T, class Container>
bool operator<=(const stack<T, Container>&,
const stack<T, Container>&);
template <class T, class Container>
bool operator>=(const stack<T, Container>&,
const stack<T, Container>&);
}
explicit stack(const Container& = Container());
Constructs an empty stack.
bool empty() const;
Returns true if the stack is empty, otherwise false.
void pop();
Removes the item at the top of the stack.
void push(const value_type& x);
Pushes x onto the stack.
size_type size() const;
Returns the number of elements on the stack.
value_type& top();
Returns a reference to the item at the top of the stack.
const value_type& top() const;
Returns a constant reference to the item at the top of the stack as a const value_type.
template <class T, class Container>
bool operator==(const stack<T, Container>& x,
const stack<T, Container>& y);
Returns true if x is the same as y.
template <class T, class Container>
bool operator!=(const stack<T, Container>& x,
const stack<T, Container>& y);
Returns !(x==y).
template <class T, class Container>
bool operator<(const stack<T, Container>& x,
const stack<T, Container>& y);
Returns true if the stack defined by the elements contained in x is lexicographically less than the stack defined by the elements of y.
template <class T, class Container>
bool operator>(const stack<T, Container>& x,
const stack<T, Container>& y);
Returns y < x.
template <class T, class Container>
bool operator<=(const stack<T, Container>& x,
const stack<T, Container>& y);
Returns !(y < x).
template <class T, class Container>
bool operator>=(const stack<T, Container>& x,
const stack<T, Container>& y);
Returns !(x < y).
//
// stack.cpp
//
#include <stack>
#include <vector>
#include <deque>
#include <string>
#include <iostream>
int main ()
{
#ifndef _RWSTD_NO_NAMESPACE
using namespace std;
#endif
// Make a stack using a vector container.
stack<int,vector<int,allocator<int> > > s;
// Push a couple of values on the stack.
s.push(1);
s.push(2);
cout << s.top() << endl;
// Now pop them off.
s.pop();
cout << s.top() << endl;
s.pop();
// Make a stack of strings using a deque.
stack<string,deque<string,allocator<string> > > ss;
// Push a bunch of strings on then pop them off.
int i;
for (i = 0; i < 10; i++)
{
ss.push(string(i+1,'a'));
cout << ss.top() << endl;
}
for (i = 0; i < 10; i++)
{
cout << ss.top() << endl;
ss.pop();
}
return 0;
}
Program Output:
2 1 a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaa aaaaaaaa aaaaaaa aaaaaa aaaaa aaaa aaa aa a
allocator, Containers, deque, list, vector
ISO/IEC 14882:1998 -- International Standard for Information Systems -- Programming Language C++, Section 23.2.3.3