我有一个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.
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用两个向量,我将不再有问题,但是有没有更好,更有效的方法来做我想做的事情?
顺便说一句,如果不清楚,m_vPaths就是这样声明的(在我的课上):
std::vector<std::string> m_vPaths;
Run Code Online (Sandbox Code Playgroud) 我正在尝试进行videoObjects存储在a中的Z-Index重新排序vector.计划是确定videoObject哪个将被放置在第一个位置vector,擦除它然后将其插入第一个位置.不幸的是,该erase()功能总是导致错误的内存访
这是我的代码:
testApp.h:
vector<videoObject> videoObjects;
vector<videoObject>::iterator itVid;
Run Code Online (Sandbox Code Playgroud)
testApp.cpp:
// Get the videoObject which relates to the user event
for(itVid = videoObjects.begin(); itVid != videoObjects.end(); ++itVid) {
if(videoObjects.at(itVid - videoObjects.begin()).isInside(ofPoint(tcur.getX(), tcur.getY()))) {
videoObjects.erase(itVid);
}
}
Run Code Online (Sandbox Code Playgroud)
这应该是如此简单,但我只是没有看到我在哪里走错了路.