我需要在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也适用于矢量.
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)