2D双数组没有填充值

时间:2017-08-13 22:16:58

标签: c++11 multidimensional-array double

在我的程序中,我试图用DBL_MAX的常量值填充二维数组的双精度数。但是,当我调试我的代码时,我发现数组填充的值为0,而不是DBL_MAX,即使在我跳过数组填充代码之后也是如此。有什么我做错了吗?

这是我填写double 2d数组的代码

double array[150][150];
memset(array, DBL_MAX, sizeof(array));

2 个答案:

答案 0 :(得分:2)

memset()对于这项工作来说只是错误的工具。

它被声明为:

void* memset( void* dest, int ch, std::size_t count );

ch分配给每个数据字节。如果你测试DBL_MAX是什么,当转换为int时,你可以确认你为什么得到零:

int x = DBL_MAX;
std::cout << x << "\n"; // prints 0

你可能会混淆cast和std::fill,但在我看来这看起来很糟糕,我认为你最好使用一个简单的双循环让编译器为你优化它:< / p>

for(auto& l : array) {
  for (auto& c : l) {
    c = DBL_MAX;
  }
}

编辑:由于您已将此标记为C ++ 11,因此请注意:除非您与直接在内存中工作的API和接口进行交互,否则您真的不应该考虑在&#34;记忆&#34;在编写现代C ++代码时。即使在处理核心数据类型时,将它们视为对象几乎总是更好。如果你使用任何旧的mem...接口,你可能会从错误的角度解决你的问题。

答案 1 :(得分:1)

memset将每个字节设置为提供的值。但是,您实际上想要设置每个double

您可以使用:

double array[150][150];
std::fill_n(&array[0][0], 150 * 150, DBL_MAX);   // #include <algorithm>

也可以使用模板元编程生成基本等同于double array[150][150] = { DBL_MAX, DBL_MAX, DBL_MAX, ....,see this thread的代码。

相关问题