繁体   English   中英

程序给出0作为输出(C ++)

[英]Program giving 0s as output (C++)

我编写了以下程序来生成前1000个素数,但是我只得到0的输出:

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool p = false;
bool is_prime(int i)
{
    int limit = sqrt(i);
    if (i == 2)
        p = true;
    else if (i % 2 == 0)
        p = false;
    else
    {
        for (int n = 3; n <= limit; n += 2)
        {
            if (i % n == 0)
            p = false;
            else
            {
                p = true;
            }
        }
    }
    return p;
}

vector<int> generate_primes(int x)
{
    vector<int> Sieve;
    for (int q = 2; q <= x; q += 1)
    {
        if (is_prime(q) == true)
            Sieve.push_back(q);
    }
    return Sieve;
}

int main()
{
    for (int g = 1; g <= 1000; g += 1)
    {
        vector<int> generate_primes(7919);
        cout << generate_primes.at(g);
    }
}

显然,构建成功了,但是为什么我得到的输出不正确? 看起来generate_primes正在生成一个空向量,所以我猜测问题出在该函数的某个地方,但是我似乎无法在代码中找到问题。

这是一个名为generate_primes的新变量的声明。

vector<int> generate_primes(7919);

该变量将在更大范围内使用相同的名称隐藏该函数。

您想要的是对已经创建的函数的调用,也许是:

vector<int> primes_list;
generate_primes(7919).swap(primes_list);

从C ++ 11开始,使用移动初始化同样有效:

vector<int> primes_list = generate_primes(7919);

还建议您在循环之外进行此操作...现在,您的主要打印程序是可以想象的最慢的程序(至少在那些确实取得了进展的程序中)。

这条线

 vector<int> generate_primes(7919);

仅生成一个名为generate_primes的变量,其默认大小为7919。

参见http://www.cplusplus.com/reference/vector/vector/vector/

该函数未调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM