2018年02月19日
《その297》 反復子(イテレータ)(1)
反復子(イテレータ)
反復子(イテレータ, iterator)は、ベクトル内の要素を取り扱う際に使用します。ポインタに似ていますが、たくさんの強力な機能を持っています。
下記のプログラムでは、ベクトル要素に対して、
先頭から末尾に向けての操作
末尾から先頭に向けての操作
を行い、値を順に表示しています。
イテレータの基礎事項の説明を、コメント文としてコード中に入れました。
以下はプログラムです。
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> v{ 10, 20, 30, 40, 50, 60 };
// --- 先頭から末尾へ走査 ---
for (vector<int>::iterator p = v.begin(); p != v.end(); p++) {
// v.begin() の返却値は v[0] を指す反復子です。
// v.end() の返却値は v[6](値としては実在しません)
// を指す反復子です。
cout << *p << ' ';
// 反復子に間接演算子「 * 」を適用すると、
// その反復子が指す要素にアクセスできます。
}
cout << '\n';
// --- 末尾から先頭へ走査 ---
for (vector<int>::reverse_iterator p
= v.rbegin(); p != v.rend(); p++) {
// v.rbegin() の返却値は v[5] を
// 指す反復子(逆進反復子)です。
// v.rend() の返却値は v[0] の前方の実在しない要素
// を指す反復子(逆進反復子)です。
cout << *p << ' ';
}
cout << '\n';
vector<int>::difference_type d1
= v.end() - v.begin();
// 反復子どうしの減算で得られる値の型は
// difference_type型
cout << "v.end() - v.begin() = " << d1 << '\n';
// 2つの要素が、何要素分だけ離れているかが求められます。
vector<int>::difference_type d2 = v.rend() - v.rbegin();
cout << "v.rend() - v.rbegin() = " << d2 << '\n';
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7337838
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック