0

私は Java/php のバックグラウンドを持っており、現在 C++ を学んでいます。C++ でエラトステネスのふるいを再作成し、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

を使用してください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 に答える