![](/img/trans.png)
[英](C++) Why this program is giving the “0” or “nan” in the output?
[英]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.