明日への断片

ゲーム制作やプログラミング関する記事を中心に更新していこうと思います。

76欠片目:STL~vector応用編~

 こんにちは。バイト代が入ったので念願だったクトゥルフ神話TRPGのルルブを購入したvoidです。
る↑るぶ(旅行雑誌)ではなくル→ルブ(ルールブック)です。

友人にトゥルフ神話TRPGを教えてもらって興味を持ち、リプレイ動画でハマってしまい、遂に買ってしまいました。
f:id:yasu-game-void:20170425232824j:plain

5800円(税別)...結構なお値段でしたが、パラパラ読んでみてかなりいろいろ書いてあるなぁとワクワクしております。
勉強の合間の息抜きに読んでウハウハしていたいと思います。

あと、約8000円のDirectXの参考書籍の注文もしました。届いたらそちらの方も勉強し始めていきたいと思います。


残りのお金は就活用に貯金です。
お金があるとつい使ってしまうので...使わないようにしなくては...


さて、本題です。昨日に引き続きSTLvectorやっていきます!

目次



反復子(イテレータ)

 イテレータvectorのみならず、コンテナ全般に対して発揮できる機能です。
コンテナは配列と違って動的にメモリの確保を行ってくれるということを機能は勉強しましたね。
そうなると、全要素にアクセスする場合、参照するデータの数が変動します。

そんな時に活躍してくれるのが、イテレータです。
イテレータとはコンテナの要素を指すポインタのようなもので、
そのコンテナの要素全てにアクセスすることが容易になります。

宣言(インクルードやstdは省略)

vector<int>::iterator itr;
// コンテナ名<型名>::iterator 反復子;

実際に使われるときは、for文やwhile文などのループ文でコンテナの中身1つずつにアクセスするときに使われることが多いでしょう。

// 4/26(修正:v.end()がv.begin()になっていたので修正)

for(itr = v.begin(); itr != v.end(); itr++)
{
    // 値を全て0にする
    *itr = 0;
}

vectorメンバ関数が唐突に出てきました。
が、非常に単純な単語ですし、for文の仕組みが分かれば何となく意味は分かりそうですね。

// コンテナの先頭要素を指します
v.begin()

// コンテナの末尾要素『の次』を指します
v.end()

// 次の要素へ移動します
itr++

つまり、
コンテナの先頭からスタート!
今の要素が末尾の次じゃなければ(末尾まで)繰り返す!
次の要素を順番に見ていく!

という感じです。

アルゴリズム関数

 ざっくりいうと、vectorの中身で、特定のデータの数を調べたり、ソートしたり、順番をひっくり返したりできる便利機能がたくさんまとめられたものです。(超ざっくり)

ここでも、データの位置を返す時にイテレータが使われたりしているのでイテレータは大変便利です。

詳細はサンプルコードにて。

サンプルソース

イテレータの便利さがなるべく伝わるよに頑張って作ったサンプルです...まだサンプル感が足りない...


実行結果:
f:id:yasu-game-void:20170426010325j:plain

次回予告

まだ確定ではありませんが、今日の授業で作っていたDirectXTKのスプライト機能をクラス化して使いやすくしたものが完成したら公開&解説的なものをできたらしようと思います。

次回予告を書くと、何書こう...て迷うことがなくなるので結構いいですね。ただし内容が縛らられてしまうので一長一短といったところでしょうか。


本日は以上。ではまた!

(Unityやって、ルルブ読んで、あと... <<現在am1:00>> )