gpt4 book ai didi

c++ - 迭代 vector ,边走边删除某些项目

转载 作者:IT老高 更新时间:2023-10-28 13:20:40 28 4
gpt4 key购买 nike

我有一个 std::vector m_vPaths;我将迭代这个 vector 并调用::DeleteFile(strPath) 。如果我成功删除文件,我会将其从 vector 中删除。我的问题是我可以避免使用两个 vector 吗?是否有不同的数据结构可能更适合我需要做的事情?

示例:使用迭代器几乎可以满足我的要求,但问题是一旦使用迭代器删除,所有迭代器都会失效。

 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.
}
}

我可以使用两个 vector ,我将不再有问题,但是有没有更好、更有效的方法来做我想做的事情?

顺便说一句,如果不清楚,m_vPaths 是这样声明的(在我的类(class)中):

std::vector<std::string> m_vPaths;

最佳答案

erase()方法返回一个新的(有效的)迭代器,它指向被删除元素之后的下一个元素。您可以使用此迭代器继续循环:

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;
}

关于c++ - 迭代 vector ,边走边删除某些项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1604588/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com