🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
クラスVector型のクラステンプレートを用いてまるで2次元配列を用いた場合のようにメモリにデータを格納することができます
クラスVector型のクラステンプレートを用いてまるで2次元配列を用いた場合のようにメモリにデータを格納することができます
#include <iostream>
#include <vector>
#include <array>
using namespace std;
int main()
{
vector<int> a = { 1,2,3,4,5 };
cout << a[0] << "\n";
cout << a[1] << "\n";
cout << a[2] << "\n";
cout << a[3] << "\n";
cout << a[4] << "\n";
return 0;
}
プログラムの実行結果
1
2
3
4
5
ソーラー「このプログラムでは
aのvector<int>型のオブジェクト宣言
vector<int> a = { 1,2,3,4,5 };
が実行されることにより
a[0]
a[1]
a[2]
a[3]
a[4]
に
1
2
3
4
5
が格納されています
ところで
次のプログラムをご覧ください
👇
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<vector<int>> a{ { 1,2,3 },{ 4,5,6 } };
cout << a[0][0] << "\n";
cout << a[0][1] << "\n";
cout << a[0][2] << "\n";
cout << a[1][0] << "\n";
cout << a[1][1] << "\n";
cout << a[1][2] << "\n";
return 0;
}
プログラムの実行結果
1
2
3
4
5
6
ソーラー「このプログラムでは
aのvector<vector<int>>型のオブジェクト宣言
vector<vector<int>> a{ { 1,2,3 },{ 4,5,6 } };
の実行により
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
が生成され
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
に
数値データ
1
2
3
4
5
6
が代入されています
マックス「なんか
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
は
2次元配列に似ているな」
ソーラー「2次元配列に似ていますが
違うところもあります
ですが
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
はメモリにデータを格納することができる
という点では
同じはたらきをします」
マックス「違いか・・・
どこにも違いはないような・・・
ところで
どういう仕組みで
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
が
生成されているんだ?」
ソーラー「そこが2次元配列と違うところなんです
vector<vector<int>> a{ { 1,2,3 },{ 4,5,6 } };
の
a{ { 1,2,3 },{ 4,5,6 } }
にご注目下さい
一番外側の{}
のなかに
{ 1,2,3 },{ 4,5,6 }
が記述されています
この
2つの{}ブロック
👇 👇
{ 1,2,3 },{ 4,5,6 }
の
{ 1,2,3 }
{ 4,5,6 }
に
0から順に(👈ここがポイントです😊)
0
1
と番号を割り当てるとします
{ 1,2,3 }👉0
{ 4,5,6 }👉1
です
そして
{ 1,2,3 }
の中身の要素
1
2
3
に
0から順に(👈ここがポイントです😊)
0
1
2
と番号を割り当てるとします
1👉0
2👉1
3👉2
と番号が割り当てられます
{ 4,5,6 }
の中身の要素
4
5
6
に
0から順に(👈ここがポイントです😊)
0
1
2
と番号を割り当てます
4👉0
5👉1
6👉2
と番号が割り当てられます
すると
a{ { 1,2,3 },{ 4,5,6 } }
の
1
は
{ 1,2,3 }
のなかの
1
の場所にあるわけですが
{ 1,2,3 }👉0
で
1
2
3
には
1👉0
2👉1
3👉2
と番号を割り当てておいたので
1の配置されている場所は
00
で表すことができます
同様に
2の配置されている場所は01
3の配置されている場所は02
4の配置されている場所は10
5の配置されている場所は11
6の配置されている場所は12
となるわけです
この
00
01
02
10
11
12
の数値を[]で括って
[0][0]
[0][1]
[0][2]
[1][0]
[1][1]
[1][2]
とし
aをくっつけて
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
としたものが
vector<vector<int>> a{ { 1,2,3 },{ 4,5,6 } };
により生成されたというわけです
もちろん
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
は
1の配置されている場所
2の配置されている場所
3の配置されている場所
4の配置されている場所
5の配置されている場所
6の配置されている場所
に対応しており
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
は
1
2
3
4
5
6
を
表すことになります
ですので
cout << a[0][0] << "\n";
cout << a[0][1] << "\n";
cout << a[0][2] << "\n";
cout << a[1][0] << "\n";
cout << a[1][1] << "\n";
cout << a[1][2] << "\n";
が実行されると
1
2
3
4
5
6
がコマンドプロンプト画面に表示されることになります
aのvector<vector<int>>型のオブジェクト宣言
vector<vector<int>> a{ { 1,2,3 },{ 4,5,6 } };
の
vector<vector<int>>
は
vector<int>をvector<>
で囲っていますが
a{ { 1,2,3 },{ 4,5,6 } }のように
{ 1,2,3 }
{ 4,5,6 }
を
{}で囲っていることに対応しています」
てんC「
int型の2次元配列宣言
int a[2][3]={{1,2,3},{4,5,6}};
が実行されるときも
配列変数
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
が生成され
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
に
1
2
3
4
5
6
が格納されることになりますね
そのことを示すプログラムはこちらです
👇
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int a[2][3]={ { 1,2,3 },{ 4,5,6 } };
cout << a[0][0] << "\n";
cout << a[0][1] << "\n";
cout << a[0][2] << "\n";
cout << a[1][0] << "\n";
cout << a[1][1] << "\n";
cout << a[1][2] << "\n";
return 0;
}
プログラムの実行結果
1
2
3
4
5
6
マックス「おお ナイスフォロー
なんだ😊
aのvector<vector<int>>型のオブジェクト宣言
vector<vector<int>> a{ { 1,2,3 },{ 4,5,6 } };
と
aのint型の2次元配列宣言
int a[2][3]={ { 1,2,3 },{ 4,5,6 } };
は
全く同じ仕組みなんじゃないか?」
ソーラー「そう、思うでしょう
int(イント)さん?」
int(イント)「違いはないんじゃないかしら?」
ソーラー「
ではでは
次のプログラムをご覧ください」
つづく・・・
[][]
この
0
1
が
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[1][1]
a[1][2]
の
左側の
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます