当我试图像下面这样使用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]'
你可以在这里指出问题吗?
答案 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.h
对min
和{{{{}}做同样的事情1}}(打破max
)。
您遇到的问题是,<limits>
的值类型不是dp
,而是double
,double[2]
无法分配。上面的代码使用了一个二维2D数组在内存中看起来就像一个平面的双精度数组这一事实,这意味着通过将-1.0
转换为dp
,它可以像一维数组一样填充。 double*
只是获取指向dp[0]
类型dp
的第一个元素的指针的最简单方法。
附录:从技术上讲,double*
属于dp[0]
类型,但在使用时会衰减到double[2]
。 double*
只能衰减到dp
(指向两个双打数组的指针)。