C++11以降、std::list
を範囲for文でループすることが可能です。
範囲for文は、コンテナの要素を簡潔に反復処理するための構文を提供します。
具体的には、std::list
の各要素を直接操作するために、for(auto& element : list)
のように記述します。
この方法は、イテレータを明示的に使用する必要がないため、コードの可読性を向上させます。
また、要素を変更する場合は、auto&
を使用して参照を取得することが推奨されます。
- std::listの初期化方法
- 範囲for文を使った基本的なループの方法
- const修飾子を用いた要素の参照
- autoキーワードを活用した型推論
- std::listの要素を変更・削除・条件付きで処理する方法
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
を活用し、効率的なコードを書いてみてはいかがでしょうか。