C++ で配列をループする方法

  1. for ループを使って配列を反復処理する
  2. 範囲ベースのループを使って配列を反復処理する
  3. 配列の反復処理に std::for_each アルゴリズムを使用する

この記事では、C++ でさまざまなメソッドを使って配列を反復処理する方法を説明します。

for ループを使って配列を反復処理する

配列の要素を反復処理する見かけの方法は,for ループである.これはカンマで区切られた 3つの文で構成されています。最初に、カウンタ変数 i を初期化します。次の部分では、繰り返しのたびに評価される条件を宣言し、false が返されるとループの実行を停止する。この場合,カウンタと配列のサイズを比較します.最後の部分はカウンタをインクリメントし、これもループのサイクルごとに実行されます。

#include <iostream>
#include <array>

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

int main() {
    array<string, 10> str_arr = {"Albatross", "Auklet",
                              "Bluebird", "Blackbird",
                              "Cowbird", "Dove",
                              "Duck", "Godwit",
                              "Gull", "Hawk"};


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

    return EXIT_SUCCESS;
}

出力:

Albatross - Auklet - Bluebird - Blackbird - Cowbird - Dove - Duck - Godwit - Gull - Hawk -

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

範囲ベースのループは、従来の for ループの可読版です。このメソッドは、複雑なコンテナに対する反復処理を容易にし、各要素へのアクセスの柔軟性を維持することができるため、強力な代替手段となります。以下のコードサンプルは、先ほどの例を忠実に再現したものです。

#include <iostream>
#include <array>

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

int main() {
    array<string, 10> str_arr = {"Albatross", "Auklet",
                              "Bluebird", "Blackbird",
                              "Cowbird", "Dove",
                              "Duck", "Godwit",
                              "Gull", "Hawk"};

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

    return EXIT_SUCCESS;
}

配列の反復処理に std::for_each アルゴリズムを使用する

for_each は、範囲要素を操作したり、カスタム定義された関数を適用したりするための強力な STL アルゴリズムです。最初の 2つのパラメータとして範囲の始点と終点のイテレータオブジェクトを、3 番目のパラメータとして関数オブジェクトを受け取ります。この場合、関数オブジェクトを lambda 式として宣言し、計算結果を直接コンソールに出力します。最後に、for_each メソッドの引数として custom_func 変数を渡すことで、配列の要素を操作することができます。

#include <iostream>
#include <array>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::array; using std::for_each;

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

    for_each(int_arr.begin(), int_arr.end(), custom_func);
    cout << endl;

    return EXIT_SUCCESS;
}

出力:

2; 8; 18; 32; 50; 72; 98; 128; 162; 200;

関連記事 - C++ Array

  • C++ で 2 次元配列を関数に渡す方法
  • C++で関数から配列を返す方法
  • comments powered by Disqus