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.