C++ でベクトルを反復処理する方法

  1. for ループを使ってベクトルを反復処理する
  2. 範囲ベースのループを使ってベクトルを反復処理する
  3. ベクトルを反復処理するための std::for_each アルゴリズムを使う

この記事では,異なるループを用いて C++ ベクトルを反復処理する方法をいくつか紹介します.サンプルコードでは、より良いデモンストレーションのために、反復処理中に要素を表示するために cout 操作を使用していることに注意してください。

for ループを使ってベクトルを反復処理する

最初のメソッドは for ループであり、カンマで区切られた 3つの文からなる。まず、変数 i を定義してゼロに初期化することから始める。次の部分では、変数 ivector の要素数と比較し、それを size() メソッドで取得する。最後の部分は比較部分として繰り返し実行され、i を 1つインクリメントする。

#include <iostream>
#include <vector>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector;

int main() {
    vector<string> str_vec = {"bit", "nibble",
                              "byte", "char",
                              "int", "long",
                              "long long", "float",
                              "double", "long double"};


    for (size_t i = 0; i < str_vec.size(); ++i) {
        cout << str_vec[i] << " - ";
    }
    cout << endl;

    return EXIT_SUCCESS;
}

出力:

bit - nibble - byte - char - int - long - long long - float - double - long double -

範囲ベースのループを使ってベクトルを反復処理する

for ループは場合によっては非常に読みづらくなることがあり、そのために範囲ベースのループと呼ばれる代替構造があります。このバージョンは、複雑なコンテナ構造の反復処理に適しており、要素にアクセスするための柔軟な機能を提供します。以下のコードサンプルを参照してください。

#include <iostream>
#include <vector>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector;

int main() {
    vector<string> str_vec = {"bit", "nibble",
                              "byte", "char",
                              "int", "long",
                              "long long", "float",
                              "double", "long double"};

    for (auto item : str_vec) {
        cout << item << " - ";
    }
    cout << endl;

    return EXIT_SUCCESS;
}

ベクトルを反復処理するための std::for_each アルゴリズムを使う

STL アルゴリズムには、使用するための広範な機能が用意されており、その中の 1つに反復処理のためのメソッドがあります。次の例は、lambda 式を用いて関数オブジェクトを宣言し、この custom_func を 1つのステートメントでベクトル要素に適用する方法を示しています。

#include <iostream>
#include <vector>
#include <algorithm>

using std::cout; using std::cin;
using std::endl; using std::vector;
using std::for_each;

int main(){
    vector<int> int_vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    auto custom_func = [](auto &i) { i *= i; };

    for_each(int_vec.begin(), int_vec.end(), custom_func);
    for (auto i : int_vec) cout << i << "; ";
    cout << endl;

    return EXIT_SUCCESS;
}

関連記事 - C++ Vector

  • C++ で関数からベクトルを返す方法
  • C++ で vector の内容を印刷する方法
  • comments powered by Disqus