foreach

foreach.png

いろいろなfor文

配列の中身を全部出したい時に便利。
配列の一部だけ必要なときはいまいち。
こんなfor文

for (変数 : 配列)
{}

int array[] = { 1, 2, 3, 4, 5 };
for (auto n : array) {
    cout << n << endl;
}
//これでもok
for (int& n : array) {
    cout << n << endl;
}

std::initializer_listの機能のよりこのようなことも可能
for(auto i: {1,2,3,4,5}){
    cout << i << " ";
}

注意
配列の中身をnewするときにautoを使うとちゃんとnewされません。そういうときは伝統的な
for(int i=0;i<n;i++){
 array[i]=new Class();

という方法を使います

foreachを1行で書こう★

組み込み配列の場合

#include <iterator>
int arr[3];
    arr[0] = 2;
    arr[1] = 4;
    arr[2] = 6;
    for_each(begin(arr), end(arr), [](auto p) {cout << p << ","; });
    //こっちでもok というかこっちの方が短く書ける
    fo(int p : arr) cout<<p<<",";

コンテナの場合
std::for_each(charactors.begin(),charctors.end(),std::mem_fun(&Charactor::draw());

mem_fun関数をつかうことにより、1行でfor_each文を書くことが可能です。

ラムダ式(無名関数)を使う

std::for_each(begin(),end(),ラムダ式);

std::for_each(charactors.begin(),charctors.end(),[](Charactor* charactor){charactor->draw();});

ラムダ式

AndroidでArrayListでforeachするときの注意

Java7だとArrayListでforeachを使っても遅くないらしい。[2]
しかしAndroidでJava7を使うとなるとAndroid4.4以上でないといけないので注意。しくしくなのでこのようなコードを書き続けないといけない

for(int i=0,n=list.size();i<n;i++)

他のコレクションはforeach遅くないのでこれを適用させる必要なしです
array cpp11 for

サポートサイト Wikidot.com arraycpp11for