C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++の入力イテレータとは?特徴と基本的な使い方を解説

本記事では、C++における入力イテレータ(Input Iterator)について、その特徴と基本的な使い方をサンプルコード付きで解説します。

入力イテレータとは

入力イテレータは、STL(Standard Template Library)に存在する5種類のイテレータの中で、最も弱く、最もシンプルなカテゴリに分類されるイテレータです。

主に逐次入力操作に使用され、コンテナ内の値を1つずつ読み取りながら、読み取るたびにイテレータを次の要素へ進めていくという動作を行います。ストリームからのデータ読み込みなど、前方へ一方向に進みながら値を取得する場面で活躍します。

サンプルコード

以下は、vectorの要素をイテレータを使って先頭から順番に読み出し、表示するシンプルな例です。

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v1 = { 1, 2, 3, 4, 5 };

    // イテレータの宣言
    vector<int>::iterator i1;

    // イテレータを使って要素を順に処理
    for (i1 = v1.begin(); i1 != v1.end(); ++i1) {
        cout << (*i1) << " ";
    }

    return 0;
}

実行結果

1 2 3 4 5

コードのポイント

  • v1.begin() でコンテナの先頭要素を指すイテレータを取得します。
  • v1.end() は末尾要素の「次」を指すため、ループの終了条件として利用されます。
  • *i1 による間接参照(デリファレンス)で、現在の要素の値を読み取ることができます。
  • ++i1 でイテレータを次の要素へ前進させます。

このように、入力イテレータは「読み取り専用・一方向・単一パス」という制約を持つ一方で、実装が簡単であり、アルゴリズム関数へのデータ入力など幅広い場面で基礎となる重要な概念です。

  1. C++で解くTwo Sum IV ― 二分探索木(BST)が入力の場合

    問題概要 二分探索木(BST)とターゲット値が1つ与えられます。このとき、BST内に「2つの要素の和がターゲット値と等しくなる」ような組み合わせが存在するかどうかを判定するのが本問題です。 例えば、次のような木が入力として与えられた場合を考えてみましょう。 この場合、出力は True(真)となります。 解法のアプローチ この問題は、BSTを中間順(inorder)走査して昇順の配列を作り、その後「双方向ポインタ(two pointer)」を使うことで効率的に解けます。具体的には、以下の手順に従います。 値を格納するための配列 v を定義します。 関数 inorder() を定義します(引

  2. C++で実装する二分探索木(BST)イテレータの作り方

    二分探索木(BST)に対するイテレータを実装することを考えてみましょう。このイテレータには、次の2つのメソッドが必要です。 next():次の要素(次に小さい値)を返すメソッド hasNext():次の要素が存在するかどうかをブール値で返すメソッド 例えば、以下のような二分探索木があるとします。 この木に対して、関数呼び出しのシーケンスが [next(), next(), hasNext(), next(), hasNext(), next(), hasNext(), next(), hasNext()] である場合、出力は [3, 7, true, 9, true, 15, true,