クラスiteratorを用いてイテレータを作製してみよう

ソーラー「ではでは


先程のプログラムをご覧ください


#include <iostream>


#include <vector>//🌞ヘッダファイル<vector>をインクルードしています


using namespace std;


int main() {


vector<int> a{1,2,3};


return 0;

}


プログラムの実行結果


続行するには何かキーを押して下さい . . .


ソーラー「このプログラムでは


連続したメモリに


数値データ

1

2

3

が格納されています


これらの数値データを表示するのに



          イテレータ



というものを用いてみましょう~」


マックス「イフリータ?


どっこかで聞いたような名前だが・・・?」



ソーラー「そちらのイフリータでなく


イテレータです


イテレータは


ポインタ変数のようなもので


クラスiteratorをもちいることにより生成されます」



マックス「イテレータ


なんか 新しい仲間の登場か」



ソーラー「そうですね


クラスiteratorをもちいて


イテレータ(オブジェクト)


itr


を作製することができます


イテレータはポインタ変数の役割を果たします


名前は


itrでなくても自由に設定することができます


vector<int> a{1,2,3};


を実行して連続したメモリに


数値データ

1

2

3

が格納されたとします


この


イテレータitrに


数値データ


1


が格納されているメモリのアドレスが代入されれば


イテレータに*(アスタリスク)演算子を用いた


*itr


数値データを


1


表すことになります


ですので


*itr


を用いて


1


をコマンドプロンプト画面に表示することができます



このとき


itr+1

itr+2


はそれぞれ


数値データ


2


が格納されているメモリのアドレス


数値データ


3


が格納されているメモリのアドレスが格納されることになるので


*(itr+1)

*(itr+2)



2

3


を表すことになり


*(itr+1)

*(itr+2)


を用いて


2

3



コマンドプロンプト画面に表示することができます


その時のプログラムはこちらです

👇


#include <iostream>


#include <vector>//🌞🌞ヘッダファイル<vector>をインクルードしています


using namespace std;


int main() {


vector<int> a{ 1,2,3 };


vector<int>::iterator itr = a.begin();


cout << *itr << "\n";

cout << *(itr+1) << "\n";

cout << *(itr+2 )<< "\n";


return 0;

}


プログラムの実行結果


1

2

3


マックス「な、なんだ


vector<int>::iterator itr = a.begin();


は?」


ソーラー「


vector<int>::iterator itr


を実行することにより


イテレータitrが生成されます


vector<int>型の オブジェクト宣言


vector<int> a{ 1,2,3 };


を実行したなら


イテレータitrを作製するには


vector<int> をiteratorに用いた


vector<int>::iterator itr


を実行する必要があります


vector<int>::を記述しなければ


vector<int>型の オブジェクト宣言


vector<int> a{ 1,2,3 };


を実行することにより


1

2

3

を格納している


連続したメモリ領域の先頭のメモリのアドレスを


生成されたイテレータitrに格納するようなことはできません」


マックス「なるほど


int型の変数のアドレスは


int*型のポインタ変数に格納されるんだったな


なんか


そんなかんじか


ところで


vector<int>::iterator itr = a.begin();



a.begin()


何を意味しているんだ


新しい人生がはじまるのか?」



おまけ


様々なクラステンプレートを用いて


メモリにデータを格納する方法があります


クラスiteretorを用いて


イテレータitrを作製して


メモリに格納されたデータにアクセスできるよう


クラスiteretorは


様々なクラステンプレートで


メンバクラスとして


設定されています


vector<int>::iterator itr



::


はスコープ解決演算子とよばれるもので


vector<int>::は


今から作製されるイテレータitrが


クラステンプレートvector<int>を用いて


メモリに格納されたデータを


とりあつかうイテレータであることをあらわすために付けられます


vector<int>::をiterator itrにくっつけることにより


イテレータitrがクラステンプレートvector<int>で用いられる


イテレータとなるわけです















  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る