Я пишу программу, которая создает два вектора для практики сравнения элементов в векторе. Первый вектор представляет собой список всех чисел, которые не являются простыми числами в диапазоне от 1 до 100 (не простые числа), второй вектор представляет собой список всех чисел в диапазоне от 1 до 100 (вектор number_bank). Я использую циклы для сравнения каждого элемента в векторах. Допустим, число 5 происходит от number_bank (который является простым числом), если это число не совпадает ни с одним из чисел в векторе not_prime_numbers, то оно возвращается в третий вектор, называемый простыми числами. Если сравнивать число, подобное 4, с элементами списка not_prime_number, то оно должно совпадать с числом 4 в этом списке и прерывать цикл, не возвращая число обратно в вектор prime_numbers. То, что происходит, - все числа между 1-100 оттесняются. Значение 4 в векторе number_bank никогда не равно 4 в векторе not_prime_numbers, поэтому цикл продолжает отталкивать 4 назад в вектор простых чисел.
Нет никакой математики, связанной с изменением элементов в этих векторах, поэтому не должно быть дополнительного запаса погрешности (эпсилон), обычно связываемого со сравнением чисел с плавающей запятой. Есть ли лучший способ сравнить элементы в этих векторах?
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 < 101.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 < 101.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]) // here is where i try to break the loop
{
break;
}
if (n == (not_prime_numbers.size()-1))
{ // here is where element is pushed back when compared to all loop elements
prime_numbers.push_back(number_bank[m]);
break;
}
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";
}
return 0;
}
Я читал о .compare и попробовал его, но там говорится, что слева должна быть структура классов (возможно, вектор не имеет структуры классов?). Я новичок в C ++ и буду очень признателен за помощь.