size関数を用いてクラステンプレートを用いてメモリにデータが格納できる個数を調べることができます

ソーラー「オブジェクト宣言


array<int, 5> arr{ 1,2,3,4,5 };



vector<int> vec{ 1,2,3,4,5 };


を実行することにより


数値データ


1

2

3

4

5


をメモリに格納することができました


このとき


array<int, 5> arr{ 1,2,3,4,5 };



vector<int> vec{ 1,2,3,4,5 };


の{}ブロック内の


1

2

3

4

5



要素といいます


そして

{}ブロック内には


1

2

3

4

5


の5つの要素が記述されています


要素の総数は5となっています


この5を要素数といいます」


ソーラー「ようは


array<int, 5>



int型の数値データを5つ格納できる容量があるというわけです



そして


クラスarray<int, 5>型が


格納できる数値データの最大個数を調べることができるのが



       クラスarray型のクラステンプレートのメンバ関数である



            size関数です



マックス「たぶん


size関数を使わなくても


array<int, 5>


を見れば


クラスarray<int, 5>型が


格納できる数値データの最大個数は5だとすぐわかるんじゃないか?」


てんC「な、なぜ それがわかったのですか?」


マックス「・・・い、いや・・・


ふつうにそう思ったんだが・・・」


ソーラー「それでは


size関数を使って


クラスarray<int, 5>型が


格納できる数値データの最大個数を調べてみたいと思います



その時のプログラムはこちらです

👇

#include <iostream>


#include <vector>


#include <array>


using namespace std;


int main()

{


array<int, 5> arr{ 1,2,3,4,5 };


cout << arr.size() << "\n";


vector<int> vec{ 1, 2, 3, 4, 5 };

cout << vec.size() << "\n";


return 0;


}


プログラムの実行結果


5

5


ソーラー「このプログラムでは


array<int, 5> arr{ 1,2,3,4,5 };


の実行により


1

2

3

4

5


がメモリに格納されています


そして次は


cout << arr.size() << "\n";

       

の実行ですね


arr.size()は


クラスarray<int, 5>型のオブジェクトarrのメンバ関数なんです


arr.size()が実行されると


クラスarray<int, 5>型が


格納できる数値データの最大個数5が表示されます」


マックス「もしかして


今 気づいたんだが


array<int, 5> arr{ 1,2,3,4,5 };


でなく


array<int, 5> arr{ 1,2,3,4 };


が実行されたら


クラスarray<int, 5>型が


格納できる数値データの最大個数はいくらになるんだ」


ソーラー「その場合も簡単です


array<int, 5> arr{ 1,2,3,4 };


が実行されると


arr[0]

arr[1]

arr[2]

arr[3]

arr[4]



1

2

3

4

0👈ココに注目してください


が格納されることになります


そうなんです


つまり


クラスarray<int, 5>型が


格納できる数値データの最大個数は5ですが


array<int, 5> arr{ 1,2,3,4 };



arr{ 1,2,3,4 }


のように


ブロック内に4つしか数値データ、要素を記述しない場合は


arr{ 1,2,3,4,0 }


のように


0が記述されたと見なされるんです


つまり


記述された要素数が


格納できる数値データの最大個数5に足りない場合は


足りない要素数の分だけ


0が記述されたと見なされるんです


ということは


array<int, 5> arr0{ };

array<int, 5> arr1{ 1 };

array<int, 5> arr2{ 1,2 };

array<int, 5> arr3{ 1,2,3 };

array<int, 5> arr4{ 1,2,3,4 };



クラスarray<int, 5>型のオブジェクト宣言のように


記述された要素数が


格納できる数値データの最大個数5に足りない場合でも


array<int, 5> arr0{ 0,0,0,0,0 };

array<int, 5> arr1{ 1,0,0,0,0 };

array<int, 5> arr2{ 1,2,0,0,0 };

array<int, 5> arr3{ 1,2,3,0,0 };

array<int, 5> arr4{ 1,2,3,4,0 };


が記述されたと見なされます


それとは関係なく


もともと


ブロック{}内に記述された要素数にかかわらず


クラスarray<int, 5>型が


格納できる数値データの最大個数は5となるんです


そのことを示すプログラムはこちらです

👇


#include <iostream>


#include <vector>


#include <array>


using namespace std;


int main()

{


array<int, 5> arr0{};

cout << arr0.size() << "\n";


array<int, 5> arr1{ 1 };

cout << arr1.size() << "\n";


array<int, 5> arr2{ 1,2 };

cout << arr2.size() << "\n";


array<int, 5> arr3{ 1,2,3 };

cout << arr3.size() << "\n";


array<int, 5> arr4{ 1,2,3,4 };

cout << arr4.size() << "\n";


vector<int> vec{ 1, 2, 3, 4, 5 };

cout << vec.size() << "\n";

return 0;


}


ビルド実行結果


5

5

5

5

5

5












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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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