8

MathematicaRange[]には、次のことを行うと呼ばれる関数があります。

Range[0, 10]
Range[-10, 0]

Ant は次のように出力します。

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
{-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0}

C++にはそのような機能がありますか?

4

4 に答える 4

9

標準ライブラリにはありませんが、boost::range:から

#include <iostream>
#include <iterator>
#include <boost/range/irange.hpp>
#include <boost/range/algorithm/copy.hpp>

int main()
{
    boost::copy(boost::irange(0, 11), 
                std::ostream_iterator<int>(std::cout, " "));
}

出力:0 1 2 3 4 5 6 7 8 9 10

于 2012-12-17T03:44:21.737 に答える
7

作成するのは簡単なようです。

std::vector<int> range(int from, int to) {
    std::vector<int> result;
    result.reserve(to-from+1);
    for (int i = from; i <= to; ++i) {
        result.push_back(i);
    }
    return result;
}
于 2012-12-17T03:43:22.560 に答える
4

完全を期すために、C++11 標準ライブラリとラムダを使用してそれを行う方法を次に示します。

vector<int> v;
int counter = -3;    // The initial value
generate_n(
    back_inserter(v) // Where to insert
,   10               // how many items
,   [&counter] () -> int { return counter++; });

これは、デモ付きのideoneへのリンクです。

于 2012-12-17T04:07:08.363 に答える
2

レイジーおよびO(1)メモリ数値範囲を提供するライブラリは 2 つだけです。

  • Boost irange - インテグラルのみ。ネガティブステップなし(?); 他のコンテナに割り当てることはできません。
  • RO numeric_range - C++11 が必要

SCC (C++ REPL) と RO の場合:

scc 'range(0,10)'
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

scc 'range(-10,0)'
{-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0}
于 2012-12-17T07:02:02.220 に答える