「for」の版間の差分
提供: C++入門
(→概要) |
|||
(同じ利用者による、間の4版が非表示) | |||
行1: | 行1: | ||
− | [[for]] (for文) | + | [[for]] (for文)とは、繰り返して処理をするときに用いられます。制御文の繰り返し文の1つです。[[C++11]]で導入されたRange-based for loop(レンジベースfor文,範囲ベースfor文)を利用すると、繰り返しが非常にシンプルに書けます。さらに推論型 [[auto]] を併用することでよりコードが簡素になります。Iterator(イテレータ)が不要になり、コーディング量が圧倒的に少なくなります。 |
'''読み方''' | '''読み方''' | ||
;[[for]]: ふぉー | ;[[for]]: ふぉー | ||
;for文: ふぉー ぶん | ;for文: ふぉー ぶん | ||
+ | ;Range-based for:れんじ べーすど ふぉー | ||
__TOC__ | __TOC__ | ||
== 概要 == | == 概要 == | ||
− | |||
[[C++]] では、繰り返し処理を行うときに、以下の制御文やテンプレートなどを使用します。 | [[C++]] では、繰り返し処理を行うときに、以下の制御文やテンプレートなどを使用します。 | ||
* [[for]] | * [[for]] | ||
** [[C言語]]と同様の[[for]] | ** [[C言語]]と同様の[[for]] | ||
− | ** [[C++11]]で拡張された[[for]] | + | ** [[C++11]]で拡張された[[for]] (Range-based for) |
* [[std::for_each]] | * [[std::for_each]] | ||
* [[BOOST_FOREACH]] | * [[BOOST_FOREACH]] | ||
行17: | 行17: | ||
[[C++11]]で拡張された機能を利用する場合は、[[clang++]] (3.3)や新しい [[g++]] (gcc48)が必要です。 | [[C++11]]で拡張された機能を利用する場合は、[[clang++]] (3.3)や新しい [[g++]] (gcc48)が必要です。 | ||
− | |||
== 単純なfor文の例 == | == 単純なfor文の例 == | ||
− | |||
=== ソースコード for.cpp === | === ソースコード for.cpp === | ||
− | |||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
#include <iostream> | #include <iostream> | ||
行36: | 行33: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== コンパイル === | === コンパイル === | ||
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
g++ for.cpp -o for | g++ for.cpp -o for | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== 実行例 === | === 実行例 === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行50: | 行44: | ||
3 | 3 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== forを使用してリストを簡単に列挙する例 == | == forを使用してリストを簡単に列挙する例 == | ||
− | [[C++11]] | + | [[C++11]]で導入されたRange-based [[for]]文を使用して、簡単にリストの要素にアクセスできるようになりました。 |
=== ソースコード vector_for_int.cpp === | === ソースコード vector_for_int.cpp === | ||
このプログラムは、[[std::vector]] の内容を表示するだけの例です。 | このプログラムは、[[std::vector]] の内容を表示するだけの例です。 | ||
行73: | 行66: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== コンパイル === | === コンパイル === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
clang++ -std=c++11 vector_for_int.cpp -o vector_for_int | clang++ -std=c++11 vector_for_int.cpp -o vector_for_int | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== 実行例 === | === 実行例 === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行89: | 行80: | ||
== autoを用いたループの例 == | == autoを用いたループの例 == | ||
[[auto]] は、[[C++11]] で追加されました。 | [[auto]] は、[[C++11]] で追加されました。 | ||
− | |||
=== ソースコード auto1.cpp === | === ソースコード auto1.cpp === | ||
このプログラムは、[[std::vector]] の内容を表示するだけの例です。 | このプログラムは、[[std::vector]] の内容を表示するだけの例です。 | ||
行110: | 行100: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== コンパイル === | === コンパイル === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
clang++ -std=c++11 auto1.cpp -o auto1 | clang++ -std=c++11 auto1.cpp -o auto1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== 実行例 === | === 実行例 === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行123: | 行111: | ||
3 | 3 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== 関連項目 == | == 関連項目 == | ||
* [[C++言語解説]] | * [[C++言語解説]] | ||
* [[C++11]] | * [[C++11]] | ||
* [[auto]] | * [[auto]] | ||
− | <!-- | + | * [[std::for_each]] |
− | vim: filetype=mediawiki | + | * [[BOOST_FOREACH]] |
+ | * [[ラムダ式]] | ||
+ | <!-- vim: filetype=mediawiki | ||
--> | --> |
2015年8月19日 (水) 21:52時点における最新版
for (for文)とは、繰り返して処理をするときに用いられます。制御文の繰り返し文の1つです。C++11で導入されたRange-based for loop(レンジベースfor文,範囲ベースfor文)を利用すると、繰り返しが非常にシンプルに書けます。さらに推論型 auto を併用することでよりコードが簡素になります。Iterator(イテレータ)が不要になり、コーディング量が圧倒的に少なくなります。
読み方
- for
- ふぉー
- for文
- ふぉー ぶん
- Range-based for
- れんじ べーすど ふぉー
目次
概要
C++ では、繰り返し処理を行うときに、以下の制御文やテンプレートなどを使用します。
- for
- std::for_each
- BOOST_FOREACH
- boost で提供されます。
C++11で拡張された機能を利用する場合は、clang++ (3.3)や新しい g++ (gcc48)が必要です。
単純なfor文の例
ソースコード for.cpp
#include <iostream> using namespace std; int main(int argc, char const* argv[]) { int a[] = {1,2,3}; for (unsigned int i = 0; i < (sizeof(a)/sizeof(int)) ; i++) { cout << a[i] << endl; } return 0; }
コンパイル
g++ for.cpp -o for
実行例
% ./for 1 2 3
forを使用してリストを簡単に列挙する例
C++11で導入されたRange-based for文を使用して、簡単にリストの要素にアクセスできるようになりました。
ソースコード vector_for_int.cpp
このプログラムは、std::vector の内容を表示するだけの例です。
#include <iostream> #include <vector> using namespace std; int main(int argc, char const* argv[]) { std::vector<int> v; v.push_back (1); v.push_back (2); v.push_back (3); for (int& x: v) { cout << x << endl; } return 0; }
コンパイル
clang++ -std=c++11 vector_for_int.cpp -o vector_for_int
実行例
% ./vector_for_int 1 2 3
autoを用いたループの例
ソースコード auto1.cpp
このプログラムは、std::vector の内容を表示するだけの例です。
#include <iostream> #include <vector> using namespace std; int main(int argc, char const* argv[]) { std::vector<int> v; v.push_back (1); v.push_back (2); v.push_back (3); for (auto x: v) { cout << x << endl; } return 0; }
コンパイル
clang++ -std=c++11 auto1.cpp -o auto1
実行例
% ./auto1 1 2 3