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