谁能告诉我 c++ 中
memset()
和 std::fill()
之间的区别吗?
我很困惑为什么我的代码不能与
memset()
一起使用,但可以与 std::fill()
一起使用。
我正在像往常一样制作埃拉托色尼筛,我期待我的筛有一系列 1 和 0 但它一直给我这个号码“72340172838076673”
这是我的代码:
#include <bits/stdc++.h>
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 字节设置为指定的 value(解释为无符号字符)。”。
这意味着
memset()
仅适用于字节。如果您的值数组不是字节数组,或者要填充的值不是字节,它们仍将被解释为字节,这意味着您极不可能获得任何有意义的内容。