仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案

Getting two different answers on same input just by different methods of initialization of an array in C++

本文关键字:输入 两个 答案 C++ 数组 初始化 方法      更新时间:2023-10-16

我正在解决一个DP问题,最长递增子序列,其中我通过两种不同的方法初始化dp数组,并针对相同的输入得到不同的结果。

第一种方法,我得到错误的答案是:int dp[n] = {1};

第二种方法,又是一个错误的答案:int dp[n]; memset(dp, 1, sizeof(dp));

最后,当我使用"for 循环"手动初始化数组时,我得到了正确的答案。

这三种初始化方法有什么区别?

输入第一行(N,即数组的大小(,下一行:数组元素

83

86 177 115 193 135 186 92 49 21 162 27 90 59 163 126 140 26 172 136 11 168 167 29 182 130 62 123 67 135 129 2 22 58 69 167 193 56 11 427 29 173 21 119 184 137 198 124 115 170 13 126 91 180156 73 62 170 196 81 105 125 84 127 136 105 46 129 113 57 124 95 182 145 14 16734 164 43 150 87 8 76 178

正确输出:15

我对"memset"和直接初始化的回答是 14。使用 for 循环初始化后得到 15

int dp[n] = {1};

第一个元素初始化为1,其余元素初始化为零。

memset(dp, 1, sizeof(dp));

将所有字节设置为1,这意味着数组中的每个元素都将0x01010101

将数组的所有元素设置为特定值的"正确"方法是使用算法函数std::fillstd::fill_n。或者使用std::vector,您可以在其中将默认值传递给每个元素的构造函数。

相关文章: