referenzübergabe an funktionen und veränderung des vectors
-
Hallo ich würde gerne wissen ob folgendes keinerlei Probleme im speicher macht....
also sowohl die referenzübergabe des vectors zu beginn da er ja unbelegt ist und so weiter an die funktion als auch das löschen der elemente durch die structure.Mich interessiert ob wirklich so alles in Ordnung ist....laufen tuts - das weiß ich - nur bei meinem weiteren code verändern sich vektoren ohne grund...und ohne segfault.
ist damit der vector wirklich nach method1 komplett korrekt verändert?
std::vector<double> vec; method1(vec); Class::method1(std::vector<double>& vec) { vec.clear(); vec.push_back(2.0); vec.push_back(5.0); vec.push_back(3.3); vec.push_back(7.0); vec.push_back(5.0); vec.push_back(3.3); vec.push_back(2.0); vec.push_back(5.4); vec.push_back(1.3); std::vector<bool> mask; mask.push_back(false); mask.push_back(true); mask.push_bak(false); vector.erase( std::remove_if( vec.begin(), vec.end(), IS_MASKED( vec, mask ) ), vec.end() ); } struct IS_MASKED { std::vector< bool > mask_; const std::vector< double >* erase_el_; IS_MASKED(const std::vector< double >& erase_el, const std::vector< bool >& mask) : erase_el_( &erase_el ), mask_( mask ) { } bool operator()(const double& f) const { return mask_[ ( &f - &*erase_el_->begin() ) % mask_.size() ]; } };
-
In der Funktion selber sehe ich kein Problem - beim Aufruf wird ja ein gültiger Vector an dich übergeben, den du dann verändern kannst (und in der Funktion greifst du auch nur über dessen Memberfunktionen auf seinen Inhalt zu).
Allerdings bin ich mir etwas unsicher, ob der Funktor das macht, was du von ihm erwartest - die Adressberechnung sieht mir reichlich suspekt aus.