第13講 ベクタの学習
第6話 2次元ベクタを関数に渡す(その2)

前話問題1解答例
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
         int a[3][3];
         int* b=(int* )malloc(9*sizeof(int));
         vector< vector<int> > c(3);
         int i;
         for(i=0;i<3;i++)c[i].resize(3);
           f1(&a[0][0]);
           f2(b);
           vector< vector<int> >::iterator j;
           j=c.begin();
           f3(j);
           g1(&a[0][0]);
           g2(b);
           g3(j);

        }
        void f1(int* x){
          int i,j;
          for(i=0;i<3;i++){
             for(j=0;j<3;j++){
               *(x+3*i+j)=3*i+j+1;
             }
          }
        }
        void f2(int* y){
          int i,j;
          for(i=0;i<3;i++){
             for(j=0;j<3;j++){
               *(y+3*i+j)=3*j+i+1;
             }
          }
        }
        void f3(vector< vector<int> >::iterator z){
          int i,j;
          for(i=0;i<3;i++){
             for(j=0;j<3;j++){
                z[i][j]=3*(2-i)+(2-j);
             }
          }
        }
        void g1(int* x){
          int i,j;
          String^ w;
          for(i=0;i<3;i++){
             for(j=0;j<3;j++){
               w+=(*(x+3*i+j)).ToString()+L" ";
             }
             w+=L"\n";
          }
          label1->Text=w;
        }
        void g2(int* y){
          int i,j;
          String^ w;
          for(i=0;i<3;i++){
             for(j=0;j<3;j++){
               w+=(*(y+3*i+j)).ToString()+L" ";
            }
            w+=L"\n";
          }
          label2->Text=w;
        }
        void g3(vector< vector<int> >::iterator z){
          int i,j;
          String^ w;
          for(i=0;i<3;i++){
             for(j=0;j<3;j++){
               w+=z[i][j].ToString()+L" ";
            }
            w+=L"\n";
          }
          label3->Text=w;
        }


前話問題2解答例
#pragma endregion
  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           int a[3][3];
           int* b=(int* )malloc(9*sizeof(int));
           vector< vector<int> > c(3);
           int i;
            for(i=0;i<3;i++)c[i].resize(3);
            String^ w;
            w=f1(&a[0][0],w);
            label1->Text=w;
            w=L"";
            w=f2(b,w);
            label2->Text=w;
            w=L"";
            vector< vector<int> >::iterator j;
           j=c.begin();
            w=f3(j,w);
           abel3->Text=w;
         }
         String^ f1(int* x,String^ w){
           int i,j;
           for(i=0;i<3;i++){
              for(j=0;j<3;j++){
                *(x+3*i+j)=3*i+j+1;
                 w+=(*(x+3*i+j)).ToString()+L" ";
              }
              w+=L"\n";
            }
            return(w);
          }
          String^ f2(int* y,String^ w){
            int i,j;
            for(i=0;i<3;i++){
              for(j=0;j<3;j++){
                *(y+3*i+j)=3*j+i+1;
                w+=(*(y+3*i+j)).ToString()+L" ";
              }
              w+=L"\n";
            }
            return(w);
         }
         String^ f3(vector< vector<int> >::iterator z,String^ w){
           int i,j;
           for(i=0;i<3;i++){
             for(j=0;j<3;j++){
               z[i][j]=3*(2-i)+(2-j)+1;
               w+=z[i][j].ToString()+L" ";
             }
           w+=L"\n";
           }
           return(w);
         }

では、次に3次元ベクタに挑戦しましょう。プロジェクトを新規作成して、次のようなForm1を作ってください。

今回は、3次元ベクタを使いビルドして実行ボタンを押すと、
と表示させるプログラムを考えてください。
a[4][3][5]タイプのの3次元ベクタを宣言するには、
vector< vector < vector <int> > > a(4);
for(i=0;i<4;i++)a[i].resize(3);
for(i=0;i<4;i++){
  for(j=0;j<3;j++){
    a[i][j].resize(5);
  }
}
のようにします。
では皆さん、大変難問だと思いますが、11話、12話を参考にして考えてみてください。

第11講第6話へ 第12講第1話へ 第13講第5話へ 第13講第7話へ


vc++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ