
Module: Standard C++ Library 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
Copyright (c) 1994-2006 Rogue Wave Software, a Quovadx Division.
Licensed under the Apache License, Version 2.0.
Contact Rogue Wave about documentation or support issues. You can also seek help from other developers through the Apache stdcxx community (see below).