久々にC++ STL入門の記事を再び書きます。
いやぁ、実はすごく良いサイトを見つけたので、
そこのリンクを貼るがために
自分用にブログにリンクをペタリとしたかっただけなので
そのついでに記事を書いてしまいました。
std::listです。
他の言語と違ってこのlistは単なる双方向リストです。
とはいっても自前で実装するのと違って高機能です。
ランダムアクセスはできません。
そんなわけでstd::vectorにはいまいち使い時が……
っていう感じのちょっとかわいそうな人です。
ちなみにとっても残念なJavaのVectorとは違います
(ArrayListで事足りますよね……。
スレッドセーフらしいですがはたして
マルチスレッド環境で同期を取るのにいやなんでもない。)
話がだいぶそれましたがlistです。
listのいいところは先頭の要素を追加したり取り出したりすることができるんですよ。
vectorはpush_back()とpop_back()しかできませんが、
push_front(), pop_back()というのが使えるんです!素晴らしい。
例としてトランプ13枚を考えてみましょう。
便宜的に左が山の一番上で右が底とします。
1 2 3 4 5 6 7 8 9 10 11 12 13
のように
それをシャッフルして、4という数字が出てくるまでカードを引きましょう!
というプログラムを書くことにしましょう。
なお、引いたカードは捨てるということで……
プログラム
ちなみにですが、vectorを使うとstd::shuffleが使えるのですが、
listには残念ながら使えません(´・ω・`)
そんなわけで手抜きで、自分でシャッフルしました。
std::copyとostream_iteratorで何やらやってますが、
for文でいちいちcoutをやるやり方を単に書き方変えているだけです。
便利~。
実行結果
12 2 3 1 5 4 13 7 8 9 10 11 6 4 13 7 8 9 10 11 6
vectorで高速pop_frontやるよ!!
c++ - Fast way to implement pop_front to a std::vector - Stack Overflow
一押しリンク
C++ コンテナ クラス入門
ここ超わかりやすくて、ここの記事を写経すると使い方をよく覚えられそうです。
今日の記事はここの紹介のため。こんな記事よりよっぽど良いw