将int数组从零填充到定义的数字

Rad*_*mko 3 c++ arrays

我需要在C++中填充int []数组,从0到变量定义的数字,但ISO C++禁止变长数组...如何轻松填充数组?我需要分配/释放内存吗?

int possibilities[SIZE];
unsigned int i = 0;
for (i = 0; i < SIZE; i++) {
    possibilities[i] = i;
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句.如果您要问 - 是的,我需要完全标准的int []数组,没有向量,没有地图等.

小智 20

在c ++ 11中,您可以使用std :: iota和std :: array.下面的示例使用1到10的值填充数组大小为10的数组.

std::array<int, 10> a;
std::iota(a.begin(), a.end(), 1);
Run Code Online (Sandbox Code Playgroud)

编辑 自然std :: iota也适用于矢量.

  • 对于那些刚刚在谷歌上找到这个的人来说, std::iota 是在标头 &lt;numeric&gt; 中定义的 (2认同)

Oli*_*rth 13

如您所见,您无法在堆栈上创建可变长度数组.所以你的选择要么是在堆上分配它(引入内存管理问题),要么使用std::vector而不是C风格的数组:

std::vector<int> possibilities(SIZE);
for (int i = 0; i < SIZE; i++)
{
    possibilities[i] = i;
}
Run Code Online (Sandbox Code Playgroud)

如果你想要更加华丽,你可以使用STL为你生成这个序列:

// This is a "functor", a class object that acts like a function with state
class IncrementingSequence
{
public:
    // Constructor, just set counter to 0
    IncrementingSequence() : i_(0) {}
    // Return an incrementing number
    int operator() () { return i_++; }
private:
    int i_;
}

std::vector<int> possibilities(SIZE);
// This calls IncrementingSequence::operator() for each element in the vector,
// and assigns the result to the element
std::generate(possibilities.begin(), possibilities.end(), IncrementingSequence);
Run Code Online (Sandbox Code Playgroud)

  • @Oli:我指的是他使用_array_这一事实,其中`begin()`和`end()`shim函数在C++ 0x之前不存在.然后对'begin,SIZE`指示范围更方便. (2认同)