Witam, mam problem z tą linijką
vec2.erase(remove_if(vec2.begin(),vec2.end(),Pred2(27,83)),vec2.end())
dokładnie chodzi mi o to, że
remove_if(vec2.begin(),vec2.end(),Pred2(27,83)
remove_if zwraca mi iterator na koniec mojej "nowej tablicy", natomiast metoda erase( ) działa na dwa sposoby dla konkretnego iterator erase( iterator _Where ) i dla iterator erase( iterator _First, iterator _Last ) Czyli jakby nie patrzeć pierwszy argument jaki przyjmuje metoda erase dla vec2 jest to iterator na koniec nowego rozmiaru, a ja potrzebuję iterator na początek. Czyli według mnie brakuje mi iteratora wskazujacego na poczatek. Niestety, wiem że moje rozumowanie jest błędne jeżeli ktoś by mógł mi to trochę przybliżyć bym był bardzo wdzięczny .
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <set>
#include <cstdlib>
#include <list>
#include <time.h>
using namespace std;
class Gen {
private:
int a, b;
public:
Gen(int x, int y)
: a(x)
, b(y)
{
}
int operator()()
{
return rand() % (b - a + 1) + a;
}
};
struct Pred2 {
int a, b;
Pred2(int x, int y)
: a(x)
, b(y)
{
}
bool operator()(int x)
{
if (x > a && x < b) {
return true;
}
return false;
}
};
int main()
{
Gen gen2(1, 200);
vector<int> vec2(200);
generate(vec2.begin(), vec2.end(), gen2);
vec2.erase(remove_if(vec2.begin(), vec2.end(), Pred2(27, 83)), vec2.end());
copy(vec2.begin(), vec2.end(), ostream_iterator<int>(cout, " "));
return 0;
}