ゆとりーなの日記

日記的な事を書いて行くと思はれる

std::for_eachにループカウンタを入れる方法

的な質問を見つけたので何となく解答してみます。具体的な内容は、

const int kMax(100);
int array[kMax];

for (int i = 0; i < kMax; ++i) {
    array[i] = i;
}

これをstd::for_eachで実現したいとのことです。
まず、今後のC++的に組み込み配列はあれなのでstd::arrayにします。イテレータが使えてアルゴリズムとの相性がアップした感が得られます。組み込み配列だとアルゴリズムに渡すイテレータ的な物の指定が少々面倒ですからね。

const int kMax(100);
std::array<int kMax> array;

for (int i = 0; i < kMax; ++i) {
    array[i] = i;
}

で、正直上の様な配列の初期化はstd::for_eachを使うよりもstd::iotaを使うのが簡単なんじゃないですかね。

const int kMax(100);
std::array<int kMax> array;

std::iota(array.begin(), array.end(), 0);

普通にstd::for_each使ってませんが、アルゴリズム使って初期化したいなら多分これが一番良い気がします。
は〜やくこいこい0x。