第12講 ベクタの学習
第8話 反復子を使ったコードの解説その3

コード再掲
#include<iostream>
#include<vector>
using namespace std;
void main(){
   int j;
   vector<int> c(3); //要素数3のベクタを用意
   for(j=0;j<3;j++)c[j]=j+1; //ベクタの各要素に値を代入
   vector<int>::iterator i; //イテレータ=ベクタの要素のアドレスを入れる変数を用意
   i=c.begin(); //ベクタの先頭アドレスをイテレータに代入
   for(j=0;j<3;j++)cout<<*(i+j)<<" "; //イテレータを使いベクタの要素をコンソールに出力
   cout<<endl;
   for(j=0;j<3;j++)cout<<i[j]<<" "; //イテレータを使い添え字でベクタの要素をコンソールに出力
   cout<<endl;
   i=c.end(); //ベクタ最終要素アドレスの次アドレスをイテレータに代入
   for(j=1;j<4;j++)cout<<*(i-j)<<" "; //イテレータを使いベクタの要素をコンソールに逆順で出力
   cout<<endl;
   for(j=3;j>0;j--)cout<<*(i-j)<<" "; //イテレータを使いベクタの要素をコンソールに出力
   cout<<endl;
   cout<<"プロジェクト終了"<<endl;
}
コード解説
p2
   i=c.end();
で取得したアドレスは1012でした。
この条件で
   for(j=3;j>0;j--)cout<<*(i-j)<<" ";
をトレースしてみますと、
j=3のとき、
cout<<*(i-j)<<" ";
から、
cout<<*(1012-12)<<" ";
すなわち
cout<<*(1000)<<" ";
となり、c[0]の中身1がコンソールに出力されます。
j=2のとき、
cout<<*(i-j)<<" ";
から、
cout<<*(1012-8)<<" ";
すなわち
cout<<*(1004)<<" ";
となり、c[1]の中身2がコンソールに出力されます。
j=1のとき、
cout<<*(i-j)<<" ";
から、
cout<<*(1012-4)<<" ";
すなわち
cout<<*(1008)<<" ";
となり、c[3]の中身3がコンソールに出力されます。
ですから、
1 2 3
と正順で表示されることになるのです。

ポインタとの違いは、
『ベクタの末尾の要素の次の要素のアドレス』
からの制御が簡単であるということです。
ポインタの場合、逆順で表示させるとなると、
添え字を使わないときは、
工夫しなければならないわけですが、
イテレータで操作可能なベクタの場合容易なわけです。

次話では、ベクタを関数に送る方法について考えます。
皆さんも第7講第8話第9話等を参考に
いろいろ試みましょう。
試行錯誤は、プログラミングにはとても大切ですよ。

第7話へ 第9話へ



a

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

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