如何动态分配具有已知值的数组

时间:2014-05-04 10:40:36

标签: c++

我刚刚在一些随机崩溃的代码中发现了这个“宝石”。它应该将一个浮点数组分配给bins,将二进制数分配给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手动添加元素,我想避免使用它。我宁愿不改变周围遗留代码的太多,所以如果我改变bins的类型,它仍然可以用作数组的替代品。用C ++解决这个问题的最佳/最理想的方法是什么?

1 个答案:

答案 0 :(得分:1)

您确实可以使用std::vector,您不需要C ++ 11初始值设定项列表才能使其正常工作,只需insert它们:

std::vector<float> bins;

...

static const float 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);