技術解説 .NET 2.0 ジェネリック(Generics) 第7回 Stack<T>とQueue<T>
2006/01/27
この文書はVisual Studio 2005をベースに記述されています。
第7回 Stack<T>とQueue<T>
古来よりメモリ管理等のやり方として、スタック方式(LIFO(FILO)方式)と、キュー方式(FIFO方式)というが存在する。
これらの方式などはまさにGenericsの格好の的である。
1.x C# Stack st = new Stack(); st.Push("1"); st.Push("2"); st.Push("3"); Debug.WriteLine((string)st.Pop()); Debug.WriteLine((string)st.Pop()); Debug.WriteLine((string)st.Pop()); Queue qu = new Queue(); qu.Enqueue("1"); qu.Enqueue("2"); qu.Enqueue("3"); Debug.WriteLine((string)qu.Dequeue()); Debug.WriteLine((string)qu.Dequeue()); Debug.WriteLine((string)qu.Dequeue());
1.x VB Dim st As Stack = New Stack st.Push("1") st.Push("2") st.Push("3") Debug.WriteLine(CStr(st.Pop())) Debug.WriteLine(CStr(st.Pop())) Debug.WriteLine(CStr(st.Pop())) Dim qu As Queue = New Queue qu.Enqueue("1") qu.Enqueue("2") qu.Enqueue("3") Debug.WriteLine(CStr(qu.Dequeue())) Debug.WriteLine(CStr(qu.Dequeue())) Debug.WriteLine(CStr(qu.Dequeue()))
1.x MC++ Stack __gc *st = new Stack(); st->Push(S"1"); st->Push(S"2"); st->Push(S"3"); Debug::WriteLine(static_cast<String*>(st->Pop())); Debug::WriteLine(static_cast<String*>(st->Pop())); Debug::WriteLine(static_cast<String*>(st->Pop())); Queue __gc *qu = new Queue(); qu->Enqueue(S"1"); qu->Enqueue(S"2"); qu->Enqueue(S"3"); Debug::WriteLine(static_cast<String*>(qu->Dequeue())); Debug::WriteLine(static_cast<String*>(qu->Dequeue())); Debug::WriteLine(static_cast<String*>(qu->Dequeue()));
いづれも1.x系でも便利に使ってきたと思う。
これらが2.0では下記のようになる
2.0 C# Stack<string> ss = new Stack<string>(); ss.Push("1"); ss.Push("2"); ss.Push("3"); Debug.Print(ss.Pop()); Debug.Print(ss.Pop()); Debug.Print(ss.Pop()); Queue<string> qs = new Queue<string>(); qs.Enqueue("1"); qs.Enqueue("2"); qs.Enqueue("3"); Debug.Print(qs.Dequeue()); Debug.Print(qs.Dequeue()); Debug.Print(qs.Dequeue());
2.0 VB Dim ss As Stack(Of String) = New Stack(Of String)() ss.Push("1") ss.Push("2") ss.Push("3") Debug.Print(ss.Pop()) Debug.Print(ss.Pop()) Debug.Print(ss.Pop()) Dim qs As Queue(Of String) = New Queue(Of String)() qs.Enqueue("1") qs.Enqueue("2") qs.Enqueue("3") Debug.Print(qs.Dequeue()) Debug.Print(qs.Dequeue()) Debug.Print(qs.Dequeue())
2.0 C++/CLI System::Collections::Generic::Stack<String^>^ ss = gcnew System::Collections::Generic::Stack<String^>(); ss->Push("1"); ss->Push("2"); ss->Push("3"); Debug::Print(ss->Pop()); Debug::Print(ss->Pop()); Debug::Print(ss->Pop()); System::Collections::Generic::Queue<String^>^ qs = gcnew System::Collections::Generic::Queue<String^>(); qs->Enqueue("1"); qs->Enqueue("2"); qs->Enqueue("3"); Debug::Print(qs->Dequeue()); Debug::Print(qs->Dequeue()); Debug::Print(qs->Dequeue());