谁能告诉我 C++ 中“memset”和“fill”之间的区别? 我很困惑为什么我的代码不能与“memset”一起使用,但可以与“fill”一起使用 我没有遇到过这个问题,所以不知道为什么会这样 谁能帮助我吗? 谢谢你! :))
我正在像往常一样制作埃拉托色尼筛,但它一直给我这个数字“72340172838076673” 我期待我的筛子出现一系列 1 和 0 但它不断返回“72340172838076673” 这是我的代码:
using namespace std;
long long s[2000009],a[1000009],i,j,n;
void seive(int N) {
j = 1;
memset(s,1,sizeof(s));
s[0] = 0;
s[1] = 0;
for(int i = 2; i <= sqrt(N); i++) {
if(s[i] == 1)
for(int j = i * i; j <= N; j += i) {
s[j] = 0;
}
}
}
int main () {
ios_base::sync_with_stdio(false); cin.tie(NULL);
cin>>n;
seive(2e6);
for (i = 1 ; i <= n ; i++) {
cin>>a[i];
cout<<s[a[i]]<<'\n';
}
}````
std::fill()
的文档说“将val分配给范围[first,last)”内的所有元素。 这意味着 std::fill
适用于任何数据类型。
另一方面,
memset()
的文档说“将ptr指向的内存块的前num个字节设置为指定值(解释为无符号字符)。”。 这意味着 memset()
只能处理字节。如果您的值数组不是字节数组,或者要填充的值不是字节,它们仍然会被解释为字节,这意味着您不太可能得到任何有意义的东西。