基础 C++(memset 和 fill)

问题描述 投票:0回答:1

谁能告诉我 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';
    }
}````
c++ primes memset sieve-of-eratosthenes
1个回答
0
投票

std::fill()
的文档说“将val分配给范围[first,last)”内的所有元素。 这意味着
std::fill
适用于任何数据类型。

另一方面,

memset()
的文档说“将ptr指向的内存块的前num个字节设置为指定值(解释为无符号字符)。”。 这意味着
memset()
只能处理字节。如果您的值数组不是字节数组,或者要填充的值不是字节,它们仍然会被解释为字节,这意味着您不太可能得到任何有意义的东西。

© www.soinside.com 2019 - 2024. All rights reserved.