矢量下标超出范围;比较矢量元素

Vector Subscript out of Range; Comparing Elements of Vectors

本文关键字:比较 元素 下标 范围      更新时间:2023-10-16

我目前正在开发一个寻找素数的程序,我知道有一些不太复杂的方法可以找到素数,但我正在尝试比较向量中的元素(not_prime_numbers&number bank(数字从1-100)),当找到一个素数值时,它会被放入最终的素数向量中。

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

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

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

在中

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在您的主机上可用,请使用它来查找此类错误和更多