gpt4 book ai didi

c++ - vector 迭代器不可递增

转载 作者:搜寻专家 更新时间:2023-10-31 01:06:08 25 4
gpt4 key购买 nike

*编辑:我删除了 else 部分。迭代器被迭代了两次 *

运行时出错:

File: c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector Line: 99

Expression: vector iterator not incrementable


File: c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector Line: 100

Expression: "Standard C++ Libraries Out of Range" && 0

我的代码必须在目录中找到新图片时发送警报。但由于我不能自己删除文件,所以我不得不耍花招。在找到图像时发送警报之前,我将其与已发送的图片 (sentPictures) 进行比较。而在 sentPictures 中我删除了目录中删除的图像,因为如果我每次都必须与过去找到的每张图像进行比较,程序可能有点沉重 xD(这是一个无限循环)

这是我得到的错误。为了确定存储的元素是否仍在目录中,我将旧元素 vector (sentPictures) 与新元素 vector (refreshVector) 进行了比较。对于每个旧元素(sentPictures),如果在 refreshVector 中找不到它们,我会一个一个地删除它们。就我而言,即使什么都没做,我也会收到错误消息。只是走过这个循环崩溃。在我的例子中,目录中有 9 个元素,它打印 5 个并崩溃。我检查了 sentPictures 中的元素,然后是 refreshVector 中的元素。我想我没有很好地处理迭代器的使用。这是一段代码。

for(std::vector<Picture>::iterator it = sentPictures.begin(); it != sentPictures.end(); it++){
std::cout << "1" << std::endl;

if(std::find(refreshVector.begin(), refreshVector.end(), *it) == refreshVector.end()){
tcout << *it <<std::endl;
//if picture not found in refresh vector, then delete it
//delete *it;
//it = refreshVector.erase(it);
}else{
std::cout<< "2" <<std::endl;
++it;
}

}

PS : 指令 delete * it;不编译。 VS 说“表达式必须有指针或句柄类型”,下面是“*”符号。我要搜索它是否与 if 条件中使用的事实无关。

最佳答案

The instruction delete * it; doesn't compile.

你正试图删除一个对象,删除需要一个指针。您还应该永远不要删除/删除[]任何未使用 new/new[] 分配的内容,这似乎不是因为您有一个带有对象(而不是指针)的 vector 。

如果你想从容器中移除某物,你应该使用其适当的函数 vector<T>::erase() . delete仅适用于在堆上分配的对象。

此外,如果是 vector ,您不必使用迭代器,您可以安全地使用索引。

for(int i=0; i != sentPictures.size(); i++)
{
sentPictures[i]; //
//etc
}

尽管查找函数仍会返回一个迭代器。

另一个注意事项,不要后递增迭代器,它会做一个冗余复制,而是预递增它,尽管我不确定编译器是否会优化它。

Now the erase problem seems to be ruled, I need to go through this code until its end. It crashes somewhere in the lopp but don't know why.

它崩溃是因为你在循环内删除;删除元素时更改数组大小,iterator will be invalid删除操作后。从 vector 中删除元素效率低下,您可能需要使用 std::set。

关于c++ - vector 迭代器不可递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21426959/

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