第13講 ベクタの学習
第4話 ベクタを関数に渡す(その2)
第9話のプログラム
#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 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);
vector<int>::iterator j;
j=c.begin();
f1(a);
f2(b);
f3(j);
g1(a);
g2(b);
g3(j);
}
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(vector<int>::iterator j){
int i;
for(i=0;i<3;i++){
*(j+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(vector<int>::iterator j){
int i;
String^ w;
for(i=0;i<3;i++){
w+=(*(j+i)).ToString()+L" ";
}
label3->Text=w;
}
と変更しても結果は同じであることは、皆さんお分かりでしょう。
vector<int>::iterator j;
j=c.begin();
は、反復子jの宣言とベクタcの最初のアドレスの代入です。
f3(j);のjとvoid f3(vector<int>::iterator j)のjを同じにしていますが、
void f3(vector<int>::iterator k){
int i;
for(i=0;i<3;i++){
*(k+i)=i+7;
}
}
としても何も問題ないことは、関数を勉強された皆さんはお分かりでしょう。
もし、ここに?が浮かぶ方は、第10講の関数の学習をもう一度お復習いしてください。
では、皆さん問題を出します。
j=c.begin();でベクタcの最初のアドレスを取得してから、
関数f1と関数g1にとんでいました。
もし、関数f1から戻ってきた後、
最終アドレスの次のアドレスを取得するj=c.end();
を使用した場合、表示させる関数g1のコードはどのように書き換えたらよいでしょうか。
つまり、
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);
vector<int>::iterator j;
j=c.begin();
f1(a);
f2(b);
f3(j);
g1(a);
g2(b);
j=c.end();
g3(j);
}
と書き方場合、g1のコードはどうなるでしょうか。
第11講第6話へ 第12講第1話へ 第13講第3話へ 第13講第5話へ
vc++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ