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);