【发布时间】:2010-12-08 22:36:47
【问题描述】:
我有一个 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.
}
}
我可以使用两个向量,我将不再有问题,但是有没有更好、更有效的方法来做我想做的事情?
顺便说一句,如果不清楚,m_vPaths 是这样声明的(在我的班级中):
std::vector<std::string> m_vPaths;
【问题讨论】:
-
另外,我真的不知道它使用什么样的数据结构,如果有比向量更好的东西,请告诉我。我不认为 std::queue 或 std::list 有任何可以帮助我的东西(虽然我可能是错的:)
标签: c++ data-structures vector loops iterator