●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

C++のイテレータ(Iterator)とは?STLコンテナを自在に操作する鍵

C++で vectormap などのSTLコンテナを扱う際に欠かせないのが「イテレータ(Iterator)」です。 イテレータは、コンテナの要素を順番にアクセスするためのポインタのような機能です。

この記事では、イテレータの基礎から実用例、種類や注意点まで、初心者にもわかりやすく解説します。

イテレータとは?

イテレータとは、STLコンテナ(vector, list, mapなど)の要素を順に走査するためのオブジェクトです。 ポインタのように使え、*で値を取得し、++で次の要素に進みます。

基本構文と使用例

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

int main() {
    vector<int> nums = {10, 20, 30};

    vector<int>::iterator it;
    for (it = nums.begin(); it != nums.end(); ++it) {
        cout << *it << " ";
    }
    return 0;
}

この例では、begin()で最初の要素を、end()で最後の次の位置を示し、イテレータを使って全要素にアクセスしています。

主な操作一覧

操作意味
*it現在の要素の値を取得
++it次の要素へ進む
--it前の要素へ戻る(双方向イテレータ)
it == nums.end()末尾の次の位置と比較

範囲ベースfor文との違い

// C++11以降はこちらも使える
for (int n : nums) {
    cout << n << " ";
}

範囲ベースfor文はイテレータを内部で使っており、簡潔に書きたいときに便利です。ただし、細かい制御が必要な場面では手動のイテレータが有効です。

mapのイテレータの例

#include <map>

map<string, int> scores = {{"Alice", 90}, {"Bob", 85}};

for (map<string, int>::iterator it = scores.begin(); it != scores.end(); ++it) {
    cout << it->first << ": " << it->second << endl;
}

mapでは->firstでキー、->secondで値を取得します。

イテレータの種類

  • 入力イテレータ:読み取り専用
  • 出力イテレータ:書き込み専用
  • 前方イテレータ:前にのみ進める
  • 双方向イテレータ:前後に移動可能(例:list)
  • ランダムアクセスイテレータ:配列のように直接アクセス可(例:vector)

イテレータのメリット

  1. コンテナに依存せず操作できる
    vectorでもlistでも同じように扱える。
  2. STLアルゴリズムと連携しやすい
    sort, find, copyなど。
  3. 柔軟な走査が可能
    部分的なループや、逆順の処理などに対応。

注意点

  • イテレータが無効になるケース(要素の削除後など)に注意。
  • ポインタに似ているが、同じではない(ポインタ演算は制限される)。

まとめ

C++のイテレータは、STLコンテナを自在に操作するための鍵です。 ポインタに似た文法で、配列のようにデータを1つずつ処理できます。

まずはvectormapで基本的な使い方に慣れ、STLアルゴリズムと組み合わせて活用していきましょう!

 

C++関連用語集

−−−−−  C++  −−−−−

C++のクラス(Class)とは?仕組みと使い方をわかりやすく解説!

C++のオブジェクト(Object)とは?クラスとの関係と役割をわかりやすく解説!

C++のコンストラクタ(Constructor)とは?役割と使い方をやさしく解説!

C++のデストラクタ(Destructor)とは?役割と使い方をやさしく解説!

C++の継承(Inheritance)とは?クラスを拡張する基本テクニック

C++の多態性/ポリモーフィズム(Polymorphism)とは?オブジェクト指向の真髄を解説!

C++のオーバーロード(Overload)とは?関数や演算子を便利に使い分けよう!

C++のオーバーライド(Override)とは?継承と仮想関数の正しい使い方

C++の仮想関数(Virtual Function)とは?ポリモーフィズムを実現する仕組みを解説!

C++の純粋仮想関数(Pure Virtual Function)とは?抽象クラスとの関係も解説!

C++の抽象クラス(Abstract Class)とは?使い方と役割をわかりやすく解説!

C++のテンプレート(Template)とは?型に依存しない汎用的な関数・クラスを作ろう!

C++の名前空間(Namespace)とは?名前の衝突を防ぐ便利な機能

C++の標準テンプレートライブラリ(STL)とは?効率的な開発に必須のライブラリ群

C++のベクター(vector)とは?配列より便利なSTLコンテナを使いこなそう!

C++のイテレータ(Iterator)とは?STLコンテナを自在に操作する鍵

C++の参照(Reference)とは?ポインタとの違いもわかりやすく解説!

C++のポインタ(Pointer)とは?メモリを操る強力な機能をやさしく解説!

C++の動的メモリ確保(Dynamic Memory Allocation)とは?newとdeleteを使いこなそう

C++のnew/delete演算子とは?動的メモリ確保の基本をマスターしよう!

C++の例外処理(Exception Handling)とは?try/catch/throwでエラーに強いプログラムを作ろう

C++のtry/catch構文とは?例外処理の基本をやさしく解説!

C++のRAIIとは?リソース管理を自動化する重要な設計原則

C++の静的変数(static variable)とは?使い方・特徴・注意点をやさしく解説!

C++の関数ポインタ(Function Pointer)とは?使い方と活用例をわかりやすく解説!

C++のラムダ式(Lambda Expression)とは?書き方・使い方をやさしく解説!

C++のスマートポインタ(Smart Pointer)とは?自動で安全なメモリ管理を実現しよう!

C++のコンパイル(Compile)とは?仕組みと流れをわかりやすく解説!

C++のリンク(Link)とは?コンパイルとの違いとエラー対策を解説!

C++のプリプロセッサディレクティブとは?#include や #define の意味と使い方