[英]C++ initialize bool array
在 C++ 中,我们会使用std::fill
:
bool* flags = new bool[n];
std::fill(flags, flags+n, false); // Also works with `true`.
问题是sizeof(flag)
不知道分配给指针flag
的数组的大小。 指针的大小对于体系结构是固定的,这意味着只有动态数组的初始部分会被初始化(如果n
很小,则会导致未定义的行为)。
如果您坚持使用bool
“普通”数组,请将初始化代码更改为:
memset(flags, false, sizeof(*flags)*n); // Wouldn't work with true
更好的方法是使用std::vector<bool>
,它使用的实现与bool
的“普通”数组相比可以节省大量内存:
int countPrimes(int n) {
std::vector<bool> flag(n, false);
int res = 0;
for (int i = 0 ; i != n ; i++) {
...
}
return res;
}
请注意,当您完成动态分配的数组时,使用std::vector<bool>
使您不必调用delete[] flags
。
数组项的大小是sizeof(bool)
或等效的sizeof *flag
,数组的大小是n*sizeof(bool)
或n*sizeof *flag
,而不是sizeof flag
。 值sizeof flag
很可能是 4(指针类型的大小),因此数组的 4 个项目被设置为0
( false
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.