首页 文章

使用向量用C求解Eratosthenes的Sieve并收到异常的错误信息

提问于
浏览
0

在今天,我问了一个关于用2D阵列实现Eratosthenes筛子的问题,并且有几个人告诉我使用向量代替 . 唯一的问题是我不知道如何在C中使用向量 .

我今天使用向量而不是2D数组重写了我的程序,直到程序结束时我才收到以下错误:

sieve.h:在函数'void printPrimes(std :: vector *,int)':sieve.h:42:20:error:'std :: cout << 中不匹配'operator <<'(素数((unsigned int)(((unsigned int)i) 12u)))'

我之前从未收到过此类错误消息,因此我不确定如何解决此问题 .

这是我修改后的代码:

筛子

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <vector>
using namespace std;

vector<int> calc_primes(int);
void printPrimes(int[]);

vector<int> calc_primes(int max)
{
    vector<int> primes;

    for(int i = 2; i < max; i++)
    {
        primes.push_back(i);
    }

    // for each value in the vector
    for(int i = 0; i < primes.size(); i++)
    {
        //get the value
        int v = primes[i];

        if (v!=0) {
            //remove all multiples of the value
            int x = i+v;
            while(x < primes.size()) {
                primes[x]=0;
                x = x+v;
            }
        }
    }
    return primes;
}

void printPrimes(vector<int>* primes, int size)
{
int primearray[size];
for(int i = 0; i < size; i++)
    {
        cout<<primes[i]<<endl;
    }
}

sieve.cpp

#include "sieve.h"
using namespace std;

int main()
{
    int max;
    cout<<"Please enter the max amount of prime numbers:"<<endl;
    cin>>max;
    vector<int> primes = calc_primes(max);
    printPrimes(primes, max);
    return 0;
}

2 回答

  • 0

    你的循环看起来像这样:

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

    但由于素数是指向矢量的指针,因此将素数视为向量数组,并且通过使用素数[i],您将访问向量数组中的第i个向量,而您打算访问第i个元素传递给函数的单个向量的

    要修复它,只需更改:

    void printPrimes(vector<int>* primes, int size)
    

    对此

    void printPrimes(const vector<int> & primes, int size)
    

    现在你说素数是对向量的引用,而 primes[i] 则是该向量的第i个元素 .

  • 2
    void printPrimes(vector<int>* primes, int size)
    {
    int primearray[size];
    for(int i = 0; i < size; i++)
        {
            cout<<(*primes)[i]<<endl;
        }
    }
    

    primes是一个指针,但是,您想要在向量中打印值 . * primes是向量素数点,所以解是*(素数)[i]

相关问题