c++ - Loop over two vectors, remove elements of 1 -
c++ - Loop over two vectors, remove elements of 1 -
i have next toy code, intended remove duplicates vector:
void overlap_removal(vector<int> &vec1, vector<int> &vec2) { (vector<int>::iterator it1 = vec1.begin(); it1 != vec1.end(); ++it1) { (vector<int>::iterator it2 = vec2.begin(); it2 != vec2.end(); ++it2) { if ((*it1)*(*it2) < 10) { vec1.erase(); } } } }
i'm doing more complicated comparing in real code, didn't want confuse matters. problem segmentation fault inevitably follows execution of this: think due fact i'm deleting element , continuing loop on same vector.
how can create code work? right starting point? in advance
try remove_if.
the basic thought provide function object such true returned if passed in element should deleted:
class iteminothervectorpred { const std::vector<int>& othervec; iteminothervectorpred(const std::vector<int>& vec) : othervec(vec) {} // homecoming true if removevecselem should deleted bool operator()(const int& removevecselem) const { homecoming (othervec.find(removevecselem) != othervec.end()) } }
then utilize instance of object tell remove_if remove vector.
void overlap_removal(vector<int> &vec1, vector<int> &vec2) { iteminothervectorpred trueifiteminothervecpred( vec2); vector<int>::iterator erasebeg = std::remove_if( vec1.begin(), vec1.end(), trueifiteminothervecpred); vec1.erase(erasebeg, vec1.end()); }
c++ stl vector iterator erase
Comments
Post a Comment