I wrote this:

in Java

import java.util.*;

class StackTest
{
    public static void main (String[] s)
    {
	Stack stack = new Stack ();
	stack.push ("a");
	stack.push ("b");
	stack.push ("c");

	Iterator itr = stack.iterator ();
	while (itr.hasNext ())
	    System.out.print (itr.next () + " ");

	System.out.println ();
	stack = null;
    }
}

and C#

using System;
using System.Collections;

class StackTest
{
   public static void Main ()
   {
       Stack stack = new Stack ();
       stack.Push ("a");
       stack.Push ("b");
       stack.Push ("c");

       IEnumerator e = stack.GetEnumerator ();
       while (e.MoveNext ())
	   Console.Write (e.Current + " ");

       Console.WriteLine ();
       stack = null;
   }
}

The result:

 $ javac StackTest.java
 $ java StackTest
 a b c

 $ mcs StackTest.cs
 $ mono StackTest.exe
 c b a

What the heck? This is confused, but I like more the .NET framework implementation. So, here is my own stack implementation: Stack.java alongside with the test program StackTest.java.

Okay, here is also a similar example in C++:

#include <iostream>
#include <string>
#include <list>

using namespace std;

int main ()
{
  list<string> stack;
  stack.push_back ("a");
  stack.push_back ("b");
  stack.push_back ("c");

  for (list<string>::const_iterator itr = stack.begin ();
       itr != stack.end (); itr++)
    cout << *itr << " ";
  cout << endl;
      
  for (list<string>::reverse_iterator itr = stack.rbegin ();
       itr != stack.rend (); itr++)
    cout << *itr << " ";
  cout << endl;

  return 0;
}
 $ g++ StackTest.cc -o StackTest
 $ ./StackTest
 a b c
 c b a

Notice that I didn't use <stack>, because it is a container adapter and it doesn't provide the iterators.