У меня есть std::vector m_vPaths; Я буду перебирать этот вектор и вызывать:: DeleteFile (strPath), когда я иду. Если я успешно удалю файл, я удалю его из вектора. Мой вопрос: могу ли я обойтись, чтобы использовать два вектора? Есть ли другая структура данных, которая может быть лучше подходит для того, что мне нужно сделать?
Пример: использование итераторов почти делает то, что я хочу, но проблема заключается в том, что вы удаляете с помощью итератора, все итераторы становятся недействительными.
std::vector<std::string> iter = m_vPaths.begin();
for( ; iter != m_vPaths.end(); iter++) {
std::string strPath = *iter;
if(::DeleteFile(strPath.c_str())) {
m_vPaths.erase(iter);
//Now my interators are invalid because I used erase,
//but I want to continue deleteing the files remaining in my vector.
}
}
Я могу использовать два вектора, и у меня больше не будет проблемы, но есть ли лучший, более эффективный способ делать то, что я пытаюсь сделать?
btw, если он неясен, m_vPaths объявляется как это (в моем классе):
std::vector<std::string> m_vPaths;