第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
Stack<String^>^ ss = gcnew 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 = gcnew Queue<String^>();
qs->Enqueue("1");
qs->Enqueue("2");
qs->Enqueue("3");
Debug::Print(qs->Dequeue());
Debug::Print(qs->Dequeue());
Debug::Print(qs->Dequeue());