🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
ヘッダファイル<array>をインクルードしクラスarray型のクラステンプレートを使用してできるクラスarray型のデータ構造を観察してみましょう
ヘッダファイル<array>をインクルードしクラスarray型のクラステンプレートを使用してできるクラスarray型のデータ構造を観察してみましょう
てんC「コンテナクラスにはヘッダファイル<array>
というものが用意されていますが
このarray
は
英語で
配列
を意味しています
このarrayが用いられたヘッダファイル<array>
は
どのようなヘッダファイルなのですか?」
ソーラー「そうだね 配列という名前のヘッダファイルとは
面白いヘッダファイルだね
では
ヘッダファイル<array>をインクルードして
array型のクラステンプレートが用いられたプログラムを
観察してみることにしましょう」
そのプログラムをご覧ください
👇
#include <iostream>
#include <array>//🌞ヘッダファイル<array>をインクルードしています
using namespace std;
int main()
{
array<int, 5> arr{ 1, 2, 3, 4, 5 };
cout << arr[0] << "\n";
cout << arr[1] << "\n";
cout << arr[2] << "\n";
cout << arr[3] << "\n";
cout << arr[4] << "\n";
return 0;
}
プログラムの実行結果
1
2
3
4
5
ソーラー「ヘッダファイル<array>をインクルードすることにより
array型のクラステンプレート
を用いることができるようになります
このプログラムでは
arrのarray<int, 5>型のオブジェクト宣言
array<int, 5> arr{ 1, 2, 3, 4, 5 };
が実行されています
この
array<int, 5> arr{ 1, 2, 3, 4, 5 };
の仕組みはどうなっているのでしょうか?
array<int, 5> arr{ 1, 2, 3, 4, 5 };
は
arrのクラスarray<int, 5>型のオブジェクト宣言なんです
これだと意味が分かりにくいですが
array型のクラステンプレートの仕組みは
配列の仕組みとそっくりなんです
arrのクラスarray<int, 5>型のオブジェクト宣言
array<int, 5> arr{ 1, 2, 3, 4, 5 };
が実行されることは
arrのint型の配列宣言
int arr[5]={ 1, 2, 3, 4, 5 };
が実行されることととても似ています
array<int, 5> arr{ 1, 2, 3, 4, 5 };
が実行されると
メモリにデータが格納されることになるのですが
まずは
array<int, 5> の部分ですね
array<int, 5>のようにint
が記述されると
メモリに格納されるデータはint型の形式で格納されることになります
そして
intにつづいて
(セミコロン),5
が記述されていますね
5が記述されると
配列変数
arr[0]
arr[1]
arr[2]
arr[3]
arr[4]
が生成されることになります
arr{ 1, 2, 3, 4, 5 }の
1
2
3
4
5
を要素といいますが
このようにブロック{}内に
1
2
3
4
5
が記述されると
配列変数
arr[0]
arr[1]
arr[2]
arr[3]
arr[4]
に
1
2
3
4
5
が代入されることになります
ですので
cout << arr[0] << "\n";
cout << arr[1] << "\n";
cout << arr[2] << "\n";
cout << arr[3] << "\n";
cout << arr[4] << "\n";
が実行されると
コマンドプロンプト画面に
1
2
3
4
5
が表示されることになります
マックス「なんか
ほんとに
arrのクラスarray<int, 5>型のオブジェクト宣言
array<int, 5> arr{ 1, 2, 3, 4, 5 };
が実行されることは
arrのint型の配列宣言
int arr[5]={ 1, 2, 3, 4, 5 };
が実行されることと似ているな」
ソーラー「そうなんです
たとえば
array<int, 5> arr{ 1, 2, 3, 4, 5 };
ではなく
array<int, 5> arr{ 1,2 };
のように
要素を減らしたとします
配列変数は
arr[0]
arr[1]
arr[2]
arr[3]
arr[4]
のように
5個生成されるのに
要素を
2つしか記述しない場合は
配列宣言
int arr[5]={ 1, 2 };
の場合のときと同様に
配列変数
arr[0]に1
arr[1]に2
が代入され
残りの配列変数
arr[2]
arr[3]
arr[4]
には
0
が代入されることになります
その時のプログラムはこちらです
👇
#include <iostream>
#include <array>
using namespace std;
int main()
{
array<int, 5> arr{ 1, 2 };
cout << arr[0] << "\n";
cout << arr[1] << "\n";
cout << arr[2] << "\n";
cout << arr[3] << "\n";
cout << arr[4] << "\n";
return 0;
}
プログラムの実行結果
1
2
0
0
0
マックス「だがしかし
arrのクラスarray<int, 5>型のオブジェクト宣言
array<int, 5> arr{ 1, 2, 3, 4, 5 };
が実行されることと
arrのint型の配列宣言
int arr[5]={ 1, 2, 3, 4, 5 };
が実行されることにはちがいがあるんだろう( ̄▽ ̄)」
ソーラー「そうなんです
例えば
arrのint型の配列宣言
int arr[5]={ 1, 2, 3, 4, 5 };
なら
int arr[]={ 1, 2, 3, 4, 5 };
のように
[]の中の5を省略することができますが
arrのクラスarray<int, 5>型のオブジェクト宣言
array<int, 5> arr{ 1, 2, 3, 4, 5 };
の場合は
array<int> arr{ 1, 2, 3, 4, 5 };
と
5を省略することはできません
その時のプログラムはこちらです
👇
#include <iostream>
#include <array>
using namespace std;
int main()
{
array<int> arr{ 1,2,3,4,5 };//👈ここです
cout << arr[0] << "\n";
cout << arr[1] << "\n";
cout << arr[2] << "\n";
cout << arr[3] << "\n";
cout << arr[4] << "\n";
return 0;
}
プログラムの実行結果
エラー C2678 二項演算子 '[': 型 'std::array' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。 10
エラー C2678 二項演算子 '[': 型 'std::array' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。 11
エラー C2678 二項演算子 '[': 型 'std::array' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。 12
エラー C2678 二項演算子 '[': 型 'std::array' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
エラー C2678 二項演算子 '[': 型 'std::array' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
エラー (アクティブ) E0442 クラス テンプレート "std::array" の引数が少なすぎます
エラー C2976 'std::array': テンプレート 引数の数が少なすぎます
エラー C2514 'std::array': クラスにコンストラクターが定義されていません。
てんC「エラー C2976 'std::array': テンプレート 引数の数が少なすぎます
が
そのことをしめしているというわけですね」
ソーラー「違いはまだまだ あるんだよ」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます