明日への断片

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

75欠片目:STL~vector基礎編~

 こんにちは。もうすぐ健康診断があるvoidです。気になっている症状の欄にいくつか当てはまる項目があるので少し不安です...

f:id:yasu-game-void:20170425015535j:plain
本日はSTL(StandardTemplateLibrary) のうち、vectorの基礎についてです。
※)画像に特に意味はありません。

◆==目次==◆



vectorとは

 C++の標準テンプレートライブラリ(StandardTemplateLibrary)の機能の一つに、vectorというものがあります。

標準テンプレートライブラリとは、頻繁に使われるデータ構造やアルゴリズムなどを使えるようにC++で標準で用意してくれているライブラリの事です。

そのデータ構造の内、一つの型のデータを複数まとめて入れることが出来る
コンテナクラスという、配列のようなものがあります。
 そのコンテナクラスの内、最も基本的な機能がVectorです。

メリット

 Vectorを使うメリットは何か?


先述した通りvectorはほとんど配列と同じような役割を果たします。では何が違うのか?

配列は宣言時に

int array[10];

と宣言するとint型の変数100個分のメモリを確保できますが、プログラム内で10をオーバーしていしまうとエライことになります。(具体的に言うと配列を破壊して、他の変数の値を勝手に変えに行ったりします。良く起こる超常的なバグの原因は大体こいつが原因です...)

なら最初から余裕をもって、

int array[100];

と宣言してしまえばいいではないのか?
そういうわけでもないのです。結果として13個とかしか使わなかった場合、かなりの量のメモリが無駄に確保されてしまいます。


これに対して、メモリを動的に確保してくれるのがvectorです。
vectorは配列と同じように連続したアドレスにデータを持っています。そのため、データへのアクセスも高速に行うことが出来ます。さらに

宣言

 vectorを使うには<vector>をインクルードする必要があります。
また名前空間stdを使用しているのでusing namespace std; を1度記述するか、
使用するたびにstd::を記述する必要があります。

#include<vector> 

...

std::vector<int> v;

要素を追加

 vectorの基本的な操作の一つに要素の追加があります。
vectorに要素を追加する場合は、push_backというメンバ関数を使用します。

std::vector<int> v; // vectorを作成
v.push_back(10);   // vectorに要素10を追加

要素を削除

 vectorの基本的な操作の一つに要素の削除があります。
vectorの要素を削除する場合は、pop_backというメンバ関数を使用します。

std::vector<int> v;

// v.pop_back();  データがない状態で削除を行うとエラー

v.push_back(10); // vectorに要素(10)を追加

v.pop_back();   // vectorから要素を削除

サンプルソース


どうせサンプル張るなら、もっと実用性あるものを書きたいんですけど、パッと思いつくものがなかったです。
次回はもっと実用性のあるものを...

次回予告

 次回、vectorの更なる機能に迫る応用編。乞うご期待を。


本日は以上。ではまた!