向量下标超出范围;向量的比较

时间:2019-01-13 21:21:10

标签: c++ vector

我目前正在开发一个查找质数的程序,我知道查找质数的方法比较复杂,但是我正在尝试比较矢量中的元素(not_prime_numbers和number bank(1-100之间的数字))当找到一个为质数的值时,将其放入最终的prime_number向量中。

我正在使用循环比较向量中的元素。当我要求程序显示矢量not_prime_numbers时,这不是问题,也不是数字库,但是,当我要求程序显示prime_number矢量时,我得到的误差矢量下标超出范围。为什么我要求素数中的向量元素超出范围,但是使用相同的循环方法来显示向量的元素not_prime_numbers&number_bank工作。我如何比较两个向量以将元素放入第三个向量(prime_numbers)是否存在问题?

#include "pch.h"
#include <iostream>
#include<vector>

int main()
{
float i = 1.0;
unsigned int n = 0;
std::vector<float>not_prime_numbers;
std::vector<float>number_bank;
std::vector<float>prime_numbers;

while (i <= 100.0)
{
    for (float j = 1.0;j<(i);++j)
    {
        float p = i / j;
        if (abs(floor(p)) == p&&j!=1.0)
        {
            not_prime_numbers.push_back(i);
            break;
        }
    }
    ++i
}

for (float k = 1.0; k <= 100.0; ++k)
{
    number_bank.push_back(k);
}

for (unsigned int m = 0; m <= number_bank.size(); ++m)
{
    while (n <= not_prime_numbers.size())
    {
        if (not_prime_numbers[n] == number_bank[m])
        {
            break;
        }
        if (n == m)
        {
            prime_numbers.push_back(number_bank[m]);
        }
        if (not_prime_numbers[n] != number_bank[m])
        {
                ++n;
        }
    }
}

std::cout << "All prime numbers between 0 and 100 are as follows:\n";
for (unsigned int j = 0; j <= prime_numbers.size(); ++j)
{
    std::cout << prime_numbers[j] << "\n";
}
}

这不是家庭作业,只是个人练习。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

while (n <= not_prime_numbers.size())
{
   if (not_prime_numbers[n] == number_bank[m])

您要跟踪最后一个元素,测试必须为n < not_prime_numbers.size()

打印结果时出现相同的错误:

for (unsigned int j = 0; j <= prime_numbers.size(); ++j)
{
  std::cout << prime_numbers[j] << "\n";
}

必须

for (unsigned int j = 0; j < prime_numbers.size(); ++j)
{
  std::cout << prime_numbers[j] << "\n";
}

如果主机上有 valgrind ,请使用它来查找此类错误以及更多