0

我更多来自 java/php 背景,我现在正在学习 C++。我试图在 C++ 中重新创建 Eratosthenes 筛并打印出所有低于 5000 的素数。

我正在使用http://www.compileonline.com/compile_cpp_online.php编写和编译这段代码

请查看代码和错误消息:

代码:

#include <iostream>

using namespace std;

bool sieve[](int max)
{
    bool primes[max];

    primes[0] = false;
    primes[1] = false;

    for(int a = 2; a < max; a++)
    {
        primes[a] = true;
    }

    for(int i = 2; i < max; i++)
    {
        if(primes[i])
        {
            for(int j = 2*i; j < max; j+=i)
            {
                bool primes[j] = false;
            }
        }
    }

    return primes;
}

int main()
{
    bool[] primes = sieve(5000);

    for(int i = 2; i < primes.size; i++)
    {
        if(primes[i])
        {
            cout << i << endl;
        }
    }
}

错误信息:

$g++ main.cpp -o demo -lm -pthread -lgmpxx -lgmp -lreadline 2>&1
main.cpp:5:5: error: expected unqualified-id before '[' token
bool[] sieve(int max)
^
4

2 回答 2

2

bool sieve[](int max)这不是声明函数以返回数组的有效语法。实际上 C++ 不能从函数返回数组。

当您返回一组bool类型时,我不会建议您std::vector<bool>,请尝试std::deque<bool>

std::deque<bool> sieve(int max)
{
    std::deque<bool> d;
    // do something to d.
    return d;
}
于 2013-10-03T12:44:04.200 回答
2

使用 a vector,数组在 C++ 中不能很好地工作。特别是你不能使用数组

  • 将其传递给函数
  • 从函数中返回
  • 将一个数组分配给另一个

这是使用向量的代码。

#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::endl;


vector<bool> sieve(int max)
{
    vector<bool> primes(max);

    primes[0] = false;
    primes[1] = false;

    for(int a = 2; a < max; a++)
    {
        primes[a] = true;
    }

    for(int i = 2; i < max; i++)
    {
        if(primes[i])
        {
            for(int j = 2*i; j < max; j+=i)
            {
                primes[j] = false;
            }
        }
    }

    return primes;
}

int main()
{
    vector<bool> primes = sieve(5000);

    for(int i = 2; i < primes.size(); i++)
    {
        if(primes[i])
        {
            cout << i << endl;
        }
    }
}
于 2013-10-03T12:46:11.243 回答