在2D双类型数组中使用fill()和fill_n()时出错

时间:2014-12-20 16:54:48

标签: c++

当我试图像下面这样使用fill()时,它会导致错误:

double dp[165][2];
fill(dp, dp+165*2, -1.0);

error: macro "fill" passed 3 arguments, but takes just 2

当我尝试使用fill_n()时,它也会导致错误:

double dp[165][2];
fill_n(dp, 165*2, -1.0);

error: incompatible types in assignment of 'const double' to 'double [2]'
你可以在这里指出问题吗?

1 个答案:

答案 0 :(得分:2)

无论

std::fill(dp[0], dp[0] + 165 * 2, -1.0);

std::fill_n(dp[0], 165 * 2, -1.0);

应该在标准C ++中工作。有两个参数的fill宏的错误表明#define某个名为fill的宏干扰了C ++标准库。这可能会打破更多的东西而不仅仅是这个,所以你应该调查它,看看是否有类似NOMINMAX宏的东西阻止windows.hmin和{{{{}}做同样的事情1}}(打破max)。

您遇到的问题是,<limits>的值类型不是dp,而是doubledouble[2]无法分配。上面的代码使用了一个二维2D数组在内存中看起来就像一个平面的双精度数组这一事实,这意味着通过将-1.0转换为dp,它可以像一维数组一样填充。 double*只是获取指向dp[0]类型dp的第一个元素的指针的最简单方法。

附录:从技术上讲,double*属于dp[0]类型,但在使用时会衰减到double[2]double*只能衰减到dp(指向两个双打数组的指针)。