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

Popular posts from this blog

java - How to set log4j.defaultInitOverride property to false in jboss server 6 -

c - GStreamer 1.0 1.4.5 RTSP Example Server sends 503 Service unavailable -

Using ajax with sonata admin list view pagination -