49

C++11 が範囲ベースの for ループ ( c++11の範囲ベースの for ) を導入して以来、整数の範囲でループを表現する最も適切な方法は何ですか?

それ以外の

for (int i=0; i<n; ++i)

のようなものを書きたいと思います

for (int i : range(0,n))

新しい標準はそのようなものをサポートしていますか?

更新: この記事では、C++ 11 で範囲ジェネレーターを実装する方法について説明します: C++ のジェネレーター

4

6 に答える 6

38

C++11 では提供されていませんが、独自のビューを作成するか、boost のビューを使用できます。

#include <boost/range/irange.hpp>
#include <iostream>

int main(int argc, char **argv)
{
    for (auto i : boost::irange(1, 10))
        std::cout << i << "\n";
}

さらに、Boost.Rangeいくつかの興味深い範囲が含まれており、新しいforループと組み合わせると非常に便利です。たとえば、逆のビューを取得できます。

于 2013-02-26T12:36:09.203 に答える
32

最もきちんとした方法はまだこれです:

for (int i=0; i<n; ++i)

私はあなたがこれを行うことができると思いますが、私はそれをそれほどきちんとしたものとは呼びません:

#include <iostream>

int main()
{
  for ( auto i : { 1,2,3,4,5 } )
  {
    std::cout<<i<<std::endl;
  }
}
于 2013-02-26T12:20:26.460 に答える
1

整数で何をしなければならないかに応じて、ヘッダーも考慮してください。<numeric>特に std::iota、場合によってはヘッダーも考慮してください。std::transformstd::fill

于 2013-02-26T13:26:48.473 に答える