Skip to content
Snippets Groups Projects

Bug fixed: remove elements in a for loop

Merged Joan Vallvé Navarro requested to merge fix-remove-in-for into devel
1 file
+ 10
7
Compare changes
  • Side-by-side
  • Inline
@@ -97,19 +97,22 @@ unsigned int ProcessorTrackerFeature::processKnown()
@@ -97,19 +97,22 @@ unsigned int ProcessorTrackerFeature::processKnown()
// Check/correct incoming-origin correspondences
// Check/correct incoming-origin correspondences
if (origin_ptr_ != nullptr)
if (origin_ptr_ != nullptr)
{
{
for (auto feature_in_incoming : known_features_incoming_)
auto ftr_inc_it = known_features_incoming_.begin();
 
while (ftr_inc_it != known_features_incoming_.end())
{
{
SizeStd track_id = feature_in_incoming->trackId();
SizeStd track_id = (*ftr_inc_it)->trackId();
FeatureBasePtr feature_in_last = track_matrix_.feature(track_id, last_ptr_);
FeatureBasePtr feature_in_last = track_matrix_.feature(track_id, last_ptr_);
FeatureBasePtr feature_in_origin = track_matrix_.feature(track_id, origin_ptr_);
FeatureBasePtr feature_in_origin = track_matrix_.feature(track_id, origin_ptr_);
if (!correctFeatureDrift(feature_in_origin, feature_in_last, feature_in_incoming))
if (!correctFeatureDrift(feature_in_origin, feature_in_last, (*ftr_inc_it)))
{
{
// Remove this feature from many places:
// Remove this feature from many places:
matches_last_from_incoming_ .erase (feature_in_incoming); // remove match
matches_last_from_incoming_ .erase (*ftr_inc_it); // remove match
track_matrix_ .remove(feature_in_incoming); // remove from track matrix
track_matrix_ .remove(*ftr_inc_it); // remove from track matrix
known_features_incoming_ .remove(feature_in_incoming); // remove from known features list
ftr_inc_it = known_features_incoming_.erase(ftr_inc_it); // remove from known features list
feature_in_incoming ->remove(); // remove from wolf tree
(*ftr_inc_it)-> remove(); // remove from wolf tree
}
}
 
else
 
ftr_inc_it++;
}
}
}
}
Loading