【发布时间】:2020-09-29 20:04:06
【问题描述】:
我想用 -1 作为所有值初始化一个二维数组。我为此使用了memset()。
#include <bits/stdc++.h>
using namespace std;
int dp[100][100];
memset(dp, -1, sizeof(dp));
int dynamicProgramming(some parameters)
{
//I want to use dp[][] array here
}
int main() {
cout<<dp[99][99];
return 0;
}
但是我得到一个错误
prog.cpp:5:7: error: expected constructor, destructor, or type conversion before ‘(’ token
memset(dp, -1, sizeof(dp));
你能告诉我正确的做法吗?
【问题讨论】:
-
你不能在函数之外有像
memset(...)这样的可执行语句!将该行放入main。另请参阅:Why should I not #include <bits/stdc++.h>?。 -
请参阅您的 C++ 教科书。所有 C++ 代码都必须出现在某个函数或类方法中,而不是像这样的全局初始化部分。也许你可以将 memset 调用移到
main()中。尽管如此,这种方法还有其他几个基本问题是错误的。 -
这种方式不能初始化全局变量。 C++ 不能以这种方式工作。您将需要找到其他方法来解决您的问题。
-
注意 memset 是按字节初始化的!由于没有最近的机器不再使用 2 的补码,因此您很可能是 幸运 并以这种方式获得所需的结果,因为每个 int 的所有四个字节看起来都相似。但是,请尝试使用 +1,您会得到完全不同的结果。 (提示:在典型的现代 64 位和较旧的 32 位硬件上,它等于 1 + 256 + 256² + 256³。)
-
我不知道“动态编程”是什么意思,而且,无论如何,C++ 仍然不能这样工作。无论您尝试做什么,您都无法从根本上改变 C++ 的工作方式。这里唯一可以做的就是使用
std::array和一个初始化函数。不过,这将是非常低效的。有关如何使用std::array的更多信息和说明,请参阅 C++ 教科书。