list

[C++] std::listを範囲for文でループする方法

C++11以降、std::listを範囲for文でループすることが可能です。

範囲for文は、コンテナの要素を簡潔に反復処理するための構文を提供します。

具体的には、std::listの各要素を直接操作するために、for(auto& element : list)のように記述します。

この方法は、イテレータを明示的に使用する必要がないため、コードの可読性を向上させます。

また、要素を変更する場合は、auto&を使用して参照を取得することが推奨されます。

std::listを範囲for文でループする方法

std::listの初期化

std::listはC++の標準ライブラリで提供される双方向リストです。

まずは、std::listの初期化方法を見てみましょう。

#include <iostream>
#include <list>
int main() {
    // 整数型のstd::listを初期化
    std::list<int> numbers = {1, 2, 3, 4, 5};
    // 初期化されたリストの要素を出力
    for (int number : numbers) {
        std::cout << number << " ";
    }
    return 0;
}
1 2 3 4 5

このコードでは、整数型のstd::listを初期化し、範囲for文を使って要素を出力しています。

範囲for文を使ったループの基本例

範囲for文は、コンテナの全要素を簡単にループするための構文です。

以下に基本的な使用例を示します。

#include <iostream>
#include <list>
int main() {
    std::list<std::string> fruits = {"apple", "banana", "cherry"};
    // 範囲for文を使ってリストの要素を出力
    for (const std::string& fruit : fruits) {
        std::cout << fruit << " ";
    }
    return 0;
}
apple banana cherry

この例では、std::listに文字列を格納し、範囲for文で各要素を出力しています。

const修飾子を使ったループ

const修飾子を使うことで、ループ内で要素を変更しないことを保証できます。

以下にその例を示します。

#include <iostream>
#include <list>
int main() {
    std::list<int> numbers = {10, 20, 30, 40, 50};
    // const修飾子を使って要素を出力
    for (const int& number : numbers) {
        std::cout << number << " ";
    }
    return 0;
}
10 20 30 40 50

このコードでは、const修飾子を使って、リストの要素を変更しないことを明示しています。

autoキーワードの活用

autoキーワードを使うことで、型を自動推論させることができます。

これにより、コードがより簡潔になります。

#include <iostream>
#include <list>
int main() {
    std::list<double> values = {1.1, 2.2, 3.3, 4.4, 5.5};
    // autoキーワードを使って要素を出力
    for (auto value : values) {
        std::cout << value << " ";
    }
    return 0;
}
1.1 2.2 3.3 4.4 5.5

この例では、autoキーワードを使って、std::listの要素の型を自動的に推論しています。

これにより、コードがより読みやすくなります。

応用例

std::listの要素を変更する

std::listの要素を範囲for文で変更する場合、要素を参照で取得する必要があります。

以下にその例を示します。

#include <iostream>
#include <list>
int main() {
    std::list<int> numbers = {1, 2, 3, 4, 5};
    // 要素を2倍にする
    for (int& number : numbers) {
        number *= 2;
    }
    // 変更後の要素を出力
    for (const int& number : numbers) {
        std::cout << number << " ";
    }
    return 0;
}
2 4 6 8 10

このコードでは、範囲for文を使って各要素を参照で取得し、2倍にしています。

std::listの要素を削除する

範囲for文では直接要素を削除することはできませんが、remove_if関数を使うことで条件に合致する要素を削除できます。

#include <iostream>
#include <list>
#include <algorithm>
int main() {
    std::list<int> numbers = {1, 2, 3, 4, 5};
    // 偶数を削除
    numbers.remove_if([](int number) { return number % 2 == 0; });
    // 削除後の要素を出力
    for (const int& number : numbers) {
        std::cout << number << " ";
    }
    return 0;
}
1 3 5

この例では、remove_if関数を使って、偶数の要素を削除しています。

std::listの要素を条件付きで処理する

条件に基づいてstd::listの要素を処理することも可能です。

以下にその例を示します。

#include <iostream>
#include <list>
int main() {
    std::list<int> numbers = {1, 2, 3, 4, 5};
    // 3より大きい要素を2倍にする
    for (int& number : numbers) {
        if (number > 3) {
            number *= 2;
        }
    }
    // 処理後の要素を出力
    for (const int& number : numbers) {
        std::cout << number << " ";
    }
    return 0;
}
1 2 3 8 10

このコードでは、if文を使って条件を設定し、3より大きい要素を2倍にしています。

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

まとめ

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

範囲for文を使った基本的なループから、要素の変更や削除、条件付き処理の応用例までを通じて、std::listの操作方法を具体的に理解することができたでしょう。

これを機に、実際のプログラムでstd::listを活用し、効率的なコードを書いてみてはいかがでしょうか。

関連記事

Back to top button