第13講 ベクタの学習
第3話 ベクタを関数に渡す(その1)
さて、それではベクタを関数に渡す方法を考えましょう。
今までコンソールアプリケーションで、展開してきましたが久しぶりに、
CLRのWindowsフォームアプリケーションに戻りましょう。
実は、コンソールアプリケーションでもCLRのWindowsフォームアプリケーションでも、
ベクタや配列の渡しに関して大きな違いはありません。
CLRのWindowsフォームアプリケーションの作り方については、第1講第3話第1講第4話を参考にしてして頂き、
次のようなフォームを作りましょう。

そして、実行をダブルクリックして次ぎのようにコーティングしましょう。
#pragma once
#include<vector>
namespace aa {

  using namespace System;
  using namespace System::ComponentModel;
  using namespace System::Collections;
  using namespace System::Windows::Forms;
  using namespace System::Data;
  using namespace System::Drawing;
  using namespace std;
     ・
     ・
     ・
#pragma endregion
  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           int a[3];
           int* b=(int* )malloc(3*sizeof(int));
           vector<int> c(3);
           f1(a);
           f2(b);
           f3(&c[0]);
           g1(a);
           g2(b);
           g3(&c[0]);
        }
        void f1(int* x){
          int i;
          for(i=0;i<3;i++){
            x[i]=i+1;
          }
        }
        void f2(int* y){
          int i;
          for(i=0;i<3;i++){
            y[i]=i+4;
          }
        }
        void f3(int* z){
          int i;
          for(i=0;i<3;i++){
            z[i]=i+7;
          }
        } 
        void g1(int* x){
          int i;
          String^ w;
          for(i=0;i<3;i++){
            w+=x[i].ToString()+L" ";
          }
          label1->Text=w;
        }
        void g2(int* y){
        int i;
        String^ w;
        for(i=0;i<3;i++){
          w+=y[i].ToString()+L" ";
        }
        label2->Text=w;
      }
      void g3(int* z){
        int i;
        String^ w;
        for(i=0;i<3;i++){
          w+=z[i].ToString()+L" ";
        }
        label3->Text=w;
      }

  };
}

(コピーペースト用

#pragma once
#include<vector>
namespace aa {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace std;
      ・
      ・
      ・
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
int a[3];
int* b=(int* )malloc(3*sizeof(int));
vector<int> c(3);
f1(a);
f2(b);
f3(&c[0]);
g1(a);
g2(b);
g3(&c[0]);
}
void f1(int* x){
int i;
for(i=0;i<3;i++){
x[i]=i+1;
}
}
void f2(int* y){
int i;
for(i=0;i<3;i++){
y[i]=i+4;
}
}
void f3(int* z){
int i;
for(i=0;i<3;i++){
z[i]=i+7;
}
}
void g1(int* x){
int i;
String^ w;
for(i=0;i<3;i++){
w+=x[i].ToString()+L" ";
}
label1->Text=w;
}
void g2(int* y){
int i;
String^ w;
for(i=0;i<3;i++){
w+=y[i].ToString()+L" ";
}
label2->Text=w;
}
void g3(int* z){
int i;
String^ w;
for(i=0;i<3;i++){
w+=z[i].ToString()+L" ";
}
label3->Text=w;
}


};
}


このように入力してからビルドし実行ボタンを押すと、
となります。
配列、ポインタ、ベクタの渡しが成功していることが分かります。



第11講第6話へ
 第12講第1話へ 第13講第2話へ 第13講第4話へ

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