[C++] forward_listを範囲for文でループ処理する方法
C++のforward_list
は、単方向リストを実装するためのコンテナです。
このコンテナは、メモリ効率が高く、要素の挿入や削除が高速であるという特徴があります。
forward_list
を範囲for文でループ処理するには、通常の配列や他のSTLコンテナと同様に、範囲for文を使用することができます。
範囲for文は、begin()
とend()
メソッドを利用して、コンテナ内の全ての要素を簡単に反復処理することを可能にします。
- forward_listを範囲for文で使用する手順
- 範囲for文での要素アクセス方法
- 範囲for文を用いた要素の変更方法
- 条件付きループ処理の実装例
- 要素のフィルタリングと変換の方法
forward_listを範囲for文でループ処理する方法
forward_listを範囲for文で使用する手順
forward_list
はC++の標準ライブラリで提供される単方向リストです。
範囲for文を使用することで、forward_list
の要素を簡単にループ処理できます。
以下に基本的な手順を示します。
#include <forward_list>
を追加する。forward_list
を宣言し、初期化する。- 範囲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
を活用した効率的なプログラムの実装に挑戦してみてはいかがでしょうか。