標準テンプレートクラスライブラリ(STL)を用いてみよう

ソーラー「C++標準ライブラリには


さまざまな便利な関数を利用することのできる


ヘッダファイル



変数の型の定義などが用意されています


C++標準ライブラリを用いることにより


自ら長大なプログラムを記述することなく


プログラムを記述することができるというわけです


さらに


C++標準ライブラリには


Standard Template Library(標準テンプレートライブラリ)


 

             STL



とよばれるものが用意されており


Standard Template Library(標準テンプレートライブラリ)


 

             STL


には


様々な機能を持つクラステンプレートや関数テンプレートなどが


用意されています


今日は


Standard Template Library(標準テンプレートライブラリ)


 

             STL


に用意されている


<vector>と呼ばれるヘッダファイルについて考察してみたいと思います


ヘッダファイル<vector>をもちいれば


vectorクラス



vectorクラスのクラステンプレートvector<T>


を使用することができるようになります


vectorクラスには


あらかじめ


メンバ関数として


push_buck関数

begin関数

insert関数

end関数などが用意されており


複数のデータを便利に管理することができます」


マックス「微妙い 説明だな」


ソーラー「


まずは


次のプログラムをご覧ください

👇

#include <iostream>


#include <vector>//🌞ヘッダファイル<vector>をインクルードしています


using namespace std;


int main() {


vector<int> a{1,2,3};


return 0;

}


プログラムの実行結果


続行するには何かキーを押して下さい . . .



ぶーにゃん「にゃにも 表示されていないにゃん・・・」


マックス「


vector<int> a{1,2,3};


ってなんじゃらほい?


もしかして・・・


<int>が登場してくるということは


クラステンプレートがからんでいたりしてな


ははははは」



ソーラー「意味はとても簡単です


vector<int> a{1,2,3};



vector<int>は


クラステンプレートvector<T>のテンプレートパラメータに


テンプレート引数intが代入されています」


マックス「なんだ


やはり


クラステンプレートvector<T>がもちいられているのか」


ソーラー「そして


vector<int> a{1,2,3};



vector<int>にa{1,2,3}


がくっついていますね」


マックス「そこそこっ


なんで


vector<int>にa{1,2,3}


がくっついているんだ?」


ソーラー「


vector<int> a{1,2,3};


はですね


これは


aのvector<int>型のオブジェクト宣言なんです」


マックス「aのvector<int>型のオブジェクト宣言


ということは


vector<int>型のオブジェクトaを作製しているってことか」


ソーラー「そうなんです


vector<int>型のオブジェクトaを作製すると


vector<int>型のオブジェクトaのメンバ関数


a.push_buck()

a.begin()

a.insert()

a.end()


等が使用することができるようになります」


マックス「なるほど


ところで


この


aにくっついている{1,2,3}は?」


ソーラー「


aのvector<int>型のオブジェクト宣言


vector<int> a{1,2,3};


が実行されると


         ある連続したメモリに


数値データ

1

2

3



仲良くならんで格納されることになります」


マックス「はい?


vector<int> a{1,2,3};


が実行されると


数値データ

1

2

3


が連続したメモリに格納される?


vector<int> a{1,2,3};


の実行により


数値データをメモリに格納することができるのか?



aの配列宣言


int a[3]={1,2,3};


が実行されると


連続したメモリに


1

2

3



格納されたが・・・


そういうノリなのか?」


ソーラー「


そうなんです


aのvector<int>型のオブジェクト宣言


vector<int> a{1,2,3};


が実行されると


aの配列宣言


int a[3]={1,2,3};


が実行された時と同じように


連続したメモリに


1

2

3


が格納されるんですよ」


マックス「なんだ


単純な仕組みじゃないか」


ソーラー「では なぜ


テンプレートパラメータTに


vector<int> a{1,2,3};



テンプレート引数intが代入されているの?



思った方がおられるかもしれませんね」



てんC「あっそうですね」


ぶーにゃん「なんでかにゃ~ん~😺」



ソーラー「それは


vector<int> a{1,2,3};


テンプレートパラメータTに


vector<int> a{1,2,3};



テンプレート引数intを代入したのは


整数値データ


1

2

3


をメモリに格納したいからなんですぅ」


マックス「じゃあ


実数値データ

1.11111

2.22222

3.33333


メモリに格納したければ・・・


vector<float> a{1.11111,2.22222,3.33333};



テンプレートパラメータTに


テンプレート引数floatを代入すればいいってことか」


ソーラー「そうなんですぅ


とっても簡単だね」









  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る