c++ - 使用 vector 用 C++ 求解埃拉托色尼筛法并收到异常错误消息

标签 c++ arrays vector std primes

今天之前,我问了一个关于使用二维数组实现埃拉托色尼筛法的问题,一些人告诉我改用 vector 。唯一的问题是我不知道如何在 C++ 中使用 vector 。

我今天使用 vector 而不是二维数组重写了我的程序,它运行得非常好,直到程序快结束时,我收到以下错误:

sieve.h: In function ‘void printPrimes(std::vector*, int)’: sieve.h:42:20: error: no match for ‘operator<<’ in ‘std::cout << *(primes + ((unsigned int)(((unsigned int)i) * 12u)))’

我以前从未收到过这种错误消息,所以我不确定如何解决这个问题。

这是我修改后的代码:

sieve.h

#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;
}

最佳答案

你的循环看起来像这样:

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

但是因为 primes 是一个指向 vector 的指针,所以这将把 primes 当作一个 vector 数组来处理,并且通过使用 primes[i] 你正在访问 vector 数组中的第 i 个 vector ,而你打算访问传递给函数的单个 vector 的第 i 个元素。

要修复它,只需更改它:

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

对此

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

现在你是说 primes 是一个 vector 的引用,然后 primes[i] 就是那个 vector 的第 i 个元素。

关于c++ - 使用 vector 用 C++ 求解埃拉托色尼筛法并收到异常错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18995025/

相关文章:

c++ - Qt 警告:传递 qreal 进行转换 QRect::QRect(int, int, int, int)

c++ - 在 ns 2.34 (Jiazi YI ns 2.29) 上添加 mp-olsr 时出现编译错误

C++ - 实现我自己的流

javascript - 如何将数组从一个html传递到另一个html页面?

c++ - 在现代 C++ 中比较 double/float 是否相等的现代实践

c - 如何找出分配一个字符数组的空间大小

arrays - 仅当列具有数据且特定列在 Google 表格中具有特定值时,才从另一张表中自动填充列

c++ - vector 结束迭代器

c++ - 对持有 unique_ptr vector 的对象列表进行排序

c++ - 使用 vector 解决 Josephus 问题