C++ 如何使用已知值动态分配数组
我只是在一些随机崩溃的代码中发现了这个“宝石”。它应该为C++ 如何使用已知值动态分配数组,c++,C++,我只是在一些随机崩溃的代码中发现了这个“宝石”。它应该为bin分配一个浮点数数组,并为nBins分配个数。根据某些情况,会有不同大小的不同阵列。当然,这会失败(或者是未定义的行为),因为tmpBins超出范围,编译器可以重用其内存 float* bins = 0; int nBins = 5; if (condition1) { float tmpBins[] = {0.,20.,30.,40.,800.}; bins = tmpBins; nBins = 5; } else {
bin
分配一个浮点数数组,并为nBins
分配个数。根据某些情况,会有不同大小的不同阵列。当然,这会失败(或者是未定义的行为),因为tmpBins
超出范围,编译器可以重用其内存
float* bins = 0;
int nBins = 5;
if (condition1) {
float tmpBins[] = {0.,20.,30.,40.,800.};
bins = tmpBins;
nBins = 5;
} else {
// more cases
}
我不知道该怎么解决这个问题。我可以使用new
分配内存,并使用memcpy
或循环复制内存。我可以使用向量,但我没有C++11的向量初始值设定项,因此我可能必须使用push_back
手动添加元素,这是我想要避免的。我不希望对周围的遗留代码做太多更改,因此如果我更改bin
的类型,它仍然可以作为阵列的替代品。在C++中,最好的/最理想的方法是什么?< p>你可以使用,你不需要C++ 11的初始化列表来工作,只是:
std::向量箱;
...
静态常量浮点tmpBins[]={0,20,30,40,800.};
nBins=sizeof(tmpBins)/sizeof(tmpBins[0]);
bins.insert(bins.end()、tmpBins、tmpBins+nBins);
或者,如果要替换当前条目:
bins = std::vector<float>(tmpBins, tmpBins + nBins);
bins=std::vector(tmpBins,tmpBins+nBins);
请注意,您可以使用赋值
而不是插入
(并删除额外的参数bin.end()
)。
bins = std::vector<float>(tmpBins, tmpBins + nBins);