Я пытаюсь научить себя C++. для этого я сделал вызов самому себе написать приложение для простого поиска. Мне удалось раз в python (изучить python) с менее эффективным алгоритмом. Я использую двусвязный список для хранения простых чисел. в настоящее время я просто пытаюсь запустить это в одном потоке, но я сделал его вдвойне связанным, чтобы впоследствии его можно было многопоточно.проблема со связанными значениями списка C++
В любом случае, TL; DR отладчик показывает, что программа застревает, пытаясь присвоить значение prm int стартовой ссылки в главном конструкторе. Я сделал кучу поиска, но я не могу понять, я делаю неправильно. (Также отмечают Bings являются отладочные сообщения)
#include <iostream>
#include <math.h>
#include <cmath>
using namespace std;
using std::cout;
struct PLink{
int prm;
PLink *next;
PLink *prev;
};
class Prime{
public:
PLink *start, *end;
Prime(){
start -> prm = 2;
end -> prm = 3;
start->next = end;
end->next = NULL;
start->prev = NULL;
end->prev = start;
addToEnd(5);
cout <<"cbing" << endl;
}
void insert(int val){
}
void addToEnd(int val){//adds a new prime to the end of the list
PLink *tmp = new PLink;
tmp->prm = val;
tmp->prev = end;
end->next = tmp;
tmp->next = NULL;
tmp = end;
cout << tmp->prm << endl;
cout << "addbing" << endl;
}
bool comp(int pot){ //compares the potential prime against known primes via modulo
int lim = sqrt(pot);
PLink * current = start;
bool check = false;
cout<<"bing " << pot << endl;
while (current->prm < lim && check == false){
if (pot%current->prm == 0) {
check = true;}
current = current->next;
}
return check; //false means its prime true means its not
}
};
int main()
{
Prime primeList;
int cap = 10000;
int beg = 5;
int count = 3;
bool toggle = false;
bool check = false;
cout << "2 \n3 \n5" << endl;
while(count < cap){
beg += 2;
cout << "bing" << endl;
if (toggle){
beg += 2;}
toggle = !toggle;
check = primeList.comp(beg);
if (check == false){
primeList.addToEnd(beg);
count++;
cout << "bing2" << endl;
}
}
};
Почему бы не просто использовать STL 'std :: list', а затем вы могли бы продолжить то, что ваша программа пытается сделать - найти простые числа. – PaulMcKenzie
'start -> prm = 2; end -> prm = 3; start-> next = end; 'Вы получаете доступ к неинициализированному указателю в конструкторе. Это не будет работать. – PaulMcKenzie
И если вы должны написать свой собственный Связанный список, не связывайте его с основным поисковым устройством. Вы вынуждены одновременно отлаживать два алгоритма. Не весело. – user4581301