Hjälp med C++ övning
Tjena Sweclockers! Det är så att jag har börjat läsa Bjarne Stroustrups Programming: Principles and Practise using C++ och har fastnat på en uppgift i flertalet dagar nu. Jag skall använda Eratosthenes såll för att beräkna alla primtal upp till 100 helt enkelt. Jag vill inte direkt ha en färdig lösning utan ser helst att någon förklarar vad jag har gjort för fel. Här har ni koden:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
inline void keep_window_open() { char ch; cin >> ch; }
vector<int>primes{ 2 };
vector<int>not_primes;
int val_max = 100;
int done = 0;
int main() {
for (int p : primes) { //Check the current prime
if (p < val_max) { //Is current prime less than max value?
for (int n = 2;n <= val_max;n += p) { //Loop from 2-100 incrementing by the prime
not_primes.push_back(n); //Add prime*n to not_primes
}
sort(not_primes.begin(), not_primes.end());
for (int i : not_primes) { //Loop through list of primes
for (int l = 3;l < val_max;++l) { //Go from 3-100
if (l > p && l != i) { //Check if number is greater than last prime and it isn't marked in not_primes
primes.push_back(l);
done = 1;
break;
}
}
if (done = 1) { //If done with this run, break
break;
}
}
done = 0; //Reset exit condition
}
}
for (int p : primes) {
cout << p << "\n";
}
keep_window_open();
}
Får detta error: Expression: vector iterator not incrementable.
Primes innehåller 2 och 3 men jag ser att den första loopen inte körs mer än en gång. Jag förstår helt enkelt inte VARFÖR?!
Är det för lite information för att ni skall kunna hjälpa mig så får ni gärna ryta till.