第12講 ベクタの学習
第9話 ベクタを関数に送る
実行結果
main上での表示 a[0]=1 a[1]=2 a[2]=3
関数f()上で表示 a[0]=1 a[1]=2 a[2]=3
main上での表示 a[0]=2 a[1]=4 a[2]=6
関数f()上で表示 a[0]=2 a[1]=4 a[2]=6

を導くプログラミング例2つ

送られる関数側でポインタを使ってベクタのアドレスを受け取るプログラミング例
#include<vector> //ベクタを使うのに必要なvectorをインクルード
#include <stdio.h> //printfを使うのに必要なstduio.hをインクルード
using namespace std; //ベクタを使うために必要
void f(int *a);
void g(int *a);
void main(){
   vector<int> a(3);
   for(char i=0;i<3;i++)a[i]=i+1; //mainにおいてデータを作成
   printf("main上での表示 ");
   for(char i=0;i<3;i++)printf("a[%d]=%d ",i,a[i]); //main上でデータを表示
   printf("\n");
   f(&(a[0])); //関数f()上でデータを表示
   g(&(a[0])); //関数g()上でデータを加工
   printf("main上での表示 ");
   for(char i=0;i<3;i++)printf("a[%d]=%d ",i,a[i]); //main上でデータを表示
   printf("\n");
   f(&(a[0])); //関数f()上でデータを表示
   printf("\n");
}

void f(int *a){ //データ表示関数
   printf("関数f()上で表示 ");
   for(char i=0;i<3;i++)printf("a[%d]=%d ",i,a[i]);
   printf("\n");
}

void g(int *a){ //データを2倍に加工する関数
   for(char i=0;i<3;i++)a[i]=2*a[i];
}
参考ダウンロードファイル


送られる関数側でイテレータ(=反復子)を使ってベクタのアドレスを受け取るプログラミング例
#include<vector> //ベクタを使うのに必要なvectorをインクルード
#include <stdio.h> //printfを使うのに必要なstduio.hをインクルード
using namespace std; //ベクタを使うために必要
void f(vector<int>::iterator a);
void g(vector<int>::iterator a);
void main(){
   vector<int> a(3);
   for(char i=0;i<3;i++)a[i]=i+1; //mainにおいてデータを作成
   printf("main上での表示 ");
   for(char i=0;i<3;i++)printf("a[%d]=%d ",i,a[i]); //main上でデータを表示
   printf("\n");
   f(a.begin()); //関数f()上でデータを表示
   g(a.begin()); //関数g()上でデータを加工
   printf("main上での表示 ");
   for(char i=0;i<3;i++)printf("a[%d]=%d ",i,a[i]); //main上でデータを表示
   printf("\n");
   f(a.begin()); //関数f()上でデータを表示
   printf("\n");
}

void f(vector<int>::iterator a){ //データ表示関数
   printf("関数f()上で表示 ");
   for(char i=0;i<3;i++)printf("a[%d]=%d ",i,a[i]);
   printf("\n");
}

void g(vector<int>::iterator a){ //データを2倍に加工する関数
   for(char i=0;i<3;i++)a[i]=2*a[i];
}
参考ダウンロードファイル

ベクタを関数に送るという話名になっていますが、
正確にはベクタの先頭アドレスを送るですよ。
配列でもベクタでもそのものを送ることは出来ません。
アドレスを送って、実質上配列やベクタを送っているだけです。
ベクタの先頭アドレスを送るを書きましたが、
イテレータ(=反復子)を使う場合、
『ベクタの末尾の要素の次の要素のアドレス』
を送ることも出来ますね。
では、この方法で同じ実行結果
main上での表示 a[0]=1 a[1]=2 a[2]=3
関数f()上で表示 a[0]=1 a[1]=2 a[2]=3
main上での表示 a[0]=2 a[1]=4 a[2]=6
関数f()上で表示 a[0]=2 a[1]=4 a[2]=6

を導くプログラムを考えて下さい。



第8話へ 第10話へ



a

eclipse c++ 入門講義第1部へ

魔方陣 数独で学ぶ V
BA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ