Deleting Vector objects in a for loop
Hi all,
I am currently trying to implement a Sieve of Eratostheneses in C++ as part of a book I am learning. The objective is to find all of the prime numbers between 1 and n in a list. To achieve this, I am using two vectors, one that stores the numbers to check, and another to hold the actual numbers.
Here is the code for where I am up to:
Code:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char** argv[])
{
vector<int> nums;
vector<int> primes;
int n, numToCheck;
cout << "Please enter n: ";
cin >> n;
//populate num list
for(int i = 2; i < n; i++)
{
nums.push_back(i);
primes.push_back(i);
}
//move through array, eliminating multiples
for(int i = 0; i < nums.size(); i++)
{
//assign number to check multiples of
numToCheck = nums[i];
//cycle through vector and delete multiples
for(int j = 0; j < primes.size(); j++)
{
if(primes[j] != numToCheck && primes[j]%numToCheck == 0)
{
primes[j] = 0; //Number isn't prime
}
}
}
for(int i = 0; i < primes.size(); i++)
{
cout << primes[i] << endl;
}
return 0;
}
The problem I currently have, is that I want to delete the number from the vector instead of just zeroing it. I have tried to use erase(primes.begin() + j) though this will produce an out of range error.
Can somebody point me in the correct direction please?