forward_list

[C++] forward_listを範囲for文でループ処理する方法

C++のforward_listは、単方向リストを実装するためのコンテナです。

このコンテナは、メモリ効率が高く、要素の挿入や削除が高速であるという特徴があります。

forward_listを範囲for文でループ処理するには、通常の配列や他のSTLコンテナと同様に、範囲for文を使用することができます。

範囲for文は、begin()end()メソッドを利用して、コンテナ内の全ての要素を簡単に反復処理することを可能にします。

forward_listを範囲for文でループ処理する方法

forward_listを範囲for文で使用する手順

forward_listはC++の標準ライブラリで提供される単方向リストです。

範囲for文を使用することで、forward_listの要素を簡単にループ処理できます。

以下に基本的な手順を示します。

  1. #include <forward_list>を追加する。
  2. forward_listを宣言し、初期化する。
  3. 範囲for文を使用してforward_listの要素をループ処理する。

以下は、forward_listを範囲for文でループ処理するサンプルコードです。

#include <iostream>
#include <forward_list>
int main() {
    // forward_listの宣言と初期化
    std::forward_list<int> numbers = {1, 2, 3, 4, 5};
    // 範囲for文でループ処理
    for (int number : numbers) {
        std::cout << number << " ";
    }
    return 0;
}
1 2 3 4 5

このコードでは、forward_listに格納された整数を範囲for文で順に出力しています。

範囲for文での要素アクセス

範囲for文を使用することで、forward_listの各要素に簡単にアクセスできます。

要素を読み取るだけでなく、必要に応じて要素を変更することも可能です。

以下のサンプルコードでは、forward_listの要素を範囲for文でアクセスし、各要素を出力しています。

#include <iostream>
#include <forward_list>
int main() {
    // forward_listの宣言と初期化
    std::forward_list<std::string> words = {"apple", "banana", "cherry"};
    // 範囲for文で要素にアクセス
    for (const std::string& word : words) {
        std::cout << word << std::endl;
    }
    return 0;
}
apple
banana
cherry

このコードでは、forward_listに格納された文字列を範囲for文で順に出力しています。

範囲for文での要素の変更

範囲for文を使用してforward_listの要素を変更することも可能です。

ただし、要素を変更する場合は、ループ内で要素を参照するために参照型を使用する必要があります。

以下のサンプルコードでは、forward_listの各要素に10を加算しています。

#include <iostream>
#include <forward_list>
int main() {
    // forward_listの宣言と初期化
    std::forward_list<int> numbers = {1, 2, 3, 4, 5};
    // 範囲for文で要素を変更
    for (int& number : numbers) {
        number += 10;
    }
    // 変更後の要素を出力
    for (int number : numbers) {
        std::cout << number << " ";
    }
    return 0;
}
11 12 13 14 15

このコードでは、forward_listの各要素に10を加算し、変更後の要素を出力しています。

範囲for文を使用することで、簡潔に要素の変更が可能です。

応用例

forward_listでの条件付きループ処理

forward_listを範囲for文でループ処理する際に、特定の条件に基づいて処理を行うことができます。

条件付きループ処理を行うことで、特定の要素に対してのみ操作を実行することが可能です。

以下のサンプルコードでは、forward_listの要素のうち、偶数の要素のみを出力しています。

#include <iostream>
#include <forward_list>
int main() {
    // forward_listの宣言と初期化
    std::forward_list<int> numbers = {1, 2, 3, 4, 5, 6};
    // 条件付きループ処理
    for (int number : numbers) {
        if (number % 2 == 0) { // 偶数かどうかをチェック
            std::cout << number << " ";
        }
    }
    return 0;
}
2 4 6

このコードでは、forward_listの要素のうち、偶数の要素のみを出力しています。

forward_listの要素を範囲for文でフィルタリング

範囲for文を使用して、forward_listの要素をフィルタリングすることができます。

フィルタリングを行うことで、特定の条件を満たす要素のみを新しいリストに格納することが可能です。

以下のサンプルコードでは、forward_listの要素のうち、3より大きい要素を新しいリストに格納しています。

#include <iostream>
#include <forward_list>
int main() {
    // forward_listの宣言と初期化
    std::forward_list<int> numbers = {1, 2, 3, 4, 5};
    // フィルタリング結果を格納するリスト
    std::forward_list<int> filtered_numbers;
    // フィルタリング処理
    for (int number : numbers) {
        if (number > 3) { // 3より大きいかどうかをチェック
            filtered_numbers.push_front(number);
        }
    }
    // フィルタリング結果を出力
    filtered_numbers.reverse(); // 順序を元に戻す
    for (int number : filtered_numbers) {
        std::cout << number << " ";
    }
    return 0;
}
4 5

このコードでは、forward_listの要素のうち、3より大きい要素を新しいリストに格納し、出力しています。

forward_listの要素を範囲for文で変換

範囲for文を使用して、forward_listの要素を変換することも可能です。

変換を行うことで、各要素に対して特定の操作を適用し、新しい値に置き換えることができます。

以下のサンプルコードでは、forward_listの各要素を2倍に変換しています。

#include <iostream>
#include <forward_list>
int main() {
    // forward_listの宣言と初期化
    std::forward_list<int> numbers = {1, 2, 3, 4, 5};
    // 要素の変換
    for (int& number : numbers) {
        number *= 2; // 各要素を2倍にする
    }
    // 変換後の要素を出力
    for (int number : numbers) {
        std::cout << number << " ";
    }
    return 0;
}
2 4 6 8 10

このコードでは、forward_listの各要素を2倍に変換し、変更後の要素を出力しています。

範囲for文を使用することで、簡潔に要素の変換が可能です。

まとめ

この記事では、C++のforward_listを範囲for文でループ処理する方法について詳しく解説しました。

forward_listの基本的な使用方法から、条件付きループ処理や要素のフィルタリング、変換といった応用例までをカバーしました。

これを機に、forward_listを活用した効率的なプログラムの実装に挑戦してみてはいかがでしょうか。

関連記事

Back to top button