Я хотел использовать следующие циклы для сопоставления элементов из двух векторов, а затем удалить их из векторов:
for(auto it1=left_unprocessed_event_arrays.begin(); it1!=left_unprocessed_event_arrays.end(); ++it1){
for(auto it2=right_unprocessed_event_arrays.begin(); it2!=right_unprocessed_event_arrays.end(); ++it2){
if(it1->header.stamp.nsec==it2->header.stamp.nsec){
matching_event_arrays.push_back({*it1,*it2});
left_unprocessed_event_arrays.erase(it1);
right_unprocessed_event_arrays.erase(it2);
}
}
}
Затем я понял, что не могу сделать это так, потому что с помощью erase()
делает итераторы недействительными.
Поиск решения привел меня к этому .Здесь кто-то предлагает использовать указатель, возвращаемый erase()
, а затем увеличивать итератор в скобке else
следующим образом:
std::vector<std::string>::iterator iter;
for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) {
if (::DeleteFile(iter->c_str()))
iter = m_vPaths.erase(iter);
else
++iter;
}
Но когда я увеличиваю только во внутреннем цикле, он выиграет 'правильно пройти через внешний цикл.Я изо всех сил пытаюсь понять, как я могу заставить это работать для моего вложенного цикла.
Итак, мой вопрос: как я могу реализовать решение связанного ответа для вложенного цикла?Или, если есть другое / лучшее решение: что это?