イテレータの基本と活用方法を徹底解説!

c++
スポンサーリンク

はじめに

C++のイテレータは、配列や vectormap などのコンテナの要素を順番に処理するために使用されます。本記事では、イテレータの基本的な操作方法や応用的な使い方を詳しく解説していきます。

イテレータとは?

イテレータは、C++のコンテナ(vector, map, set など)内の要素にアクセスするためのポインタのようなオブジェクトです。

イテレータの基本

  • コンテナの先頭要素を指すイテレータを取得コンテナ.begin()
  • コンテナの末尾の次の要素を指すイテレータを取得コンテナ.end()
  • イテレータを1つ進めるイテレータ++
  • イテレータが指す要素にアクセスする*イテレータ
  • 基本的なイテレータの使い方

    #include <bits/stdc++.h>
    using namespace std;
    

    int main() { vector<int> a = {3, 1, 5, 6, 7, 2, 4}; auto itr1 = a.begin(); // 先頭要素を指す itr1 = itr1 + 2; // 3番目の要素 (a[2]) を指す auto itr2 = itr1 + 4; // 7番目の要素 (a[6]) を指す

    cout << *itr1 << endl; // 5 cout << *itr2 << endl; // 4 }

    出力結果

    5
    4

    イテレータを使ったループ処理

    イテレータを使って vector の要素を順番に出力する方法を見てみましょう。

    #include <bits/stdc++.h>
    using namespace std;
    

    int main() { vector<int> a = {1, 2, 3};

    for (auto it = a.begin(); it != a.end(); it++) { cout << *it << endl; } }

    出力結果

    1
    2
    3

    イテレータの各種操作

    イテレータの移動

    advance(イテレータ, k);  // k 個進める
    prev(イテレータ, k);     // k 個前のイテレータを取得
    next(イテレータ, k);     // k 個先のイテレータを取得

    イテレータの指す要素のメンバにアクセス

    #include <bits/stdc++.h>
    using namespace std;
    

    int main() { vector<pair<int, int>> a = {{1, 4}, {2, 5}, {3, 6}}; auto itr = a.begin() + 1;

    cout << itr->first << ", " << itr->second << endl; }

    出力結果

    2, 5

    イテレータの指す要素の削除

    イテレータを使用して vector の特定の要素を削除することもできます。

    コンテナ.erase(イテレータ);

    注意点

  • 削除後のイテレータは無効になるため、使用しないこと!
  • 要素の追加・削除により、既存のイテレータは無効になる可能性がある
  • まとめ

  • イテレータはコンテナの要素を操作するためのオブジェクト
  • イテレータを使うことでコンテナを柔軟に操作できる
  • イテレータの無効化に注意しながら、安全にコードを記述することが重要
  • C++のイテレータを活用して、より効率的で柔軟なプログラムを書いてみましょう!

    タイトルとURLをコピーしました