8

私は今このようなものを見ました:

vector<int> x { 1, 2, 3, 4 };
for (auto i = x.begin(); i != x.end(); ++i)
{
  // do stuff
}

これを行う方が良いですか:

vector<int> x { 1, 2, 3, 4 };
for (auto i = x.begin(), end = x.end(); i != end; ++i)
{
  // do stuff
}

私は、オプティマイザーがこれを処理するだろうと考えたと思います。私が間違っている?

4

3 に答える 3

5

ほとんどの場合、オプティマイザーがその仕事をしてくれます。

ところで、なぜあなたdecltype(x.begin())がいるのautoですか?

for (auto i = x.begin(); i != x.end(); ++i)
{
  // do stuff
}

あるいは:

for (auto i : x)
{
  // do stuff
}

後者はhttp://en.cppreference.com/w/cpp/language/range-forrange forです。

于 2013-09-20T02:19:18.867 に答える
1

すべきではありません。のような一部の操作eraseはイテレータを無効にする可能性があるためです。

forループ内にそのような操作がないことが確実な場合は、遠慮なくそうしてください。ただし、通常はコンパイラが最適化を行います。(最適化フラグをオンにした場合)

于 2013-09-20T02:25:16.360 に答える