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

时间:2015-01-27 03:48:54

标签: 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正在生成一个空向量,所以我的猜测是问题出在该函数的某个地方,但我似乎无法在我的代码中找到问题。

2 个答案:

答案 0 :(得分:3)

这是名为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);

你也建议你在循环之外做这件事...现在你的主要打印程序是可以想象的最慢的(至少,那些实际上取得进展的那些)。

答案 1 :(得分:1)

这一行

 vector<int> generate_primes(7919);

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

请参阅http://www.cplusplus.com/reference/vector/vector/vector/

不调用该函数。