クラス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]


左側の












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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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