gpt4 book ai didi

c++ - std::vector::erase() 删除错误的元素

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

因此,我在 vector 中搜索一个元素,将其存储在迭代器中,然后调用 erase() 对其进行处理。不幸的是,当我设置断点并检查发生了什么时,我看到即使 closestObjectIt 指向正确的元素,该元素仍然保留在 vector 中,一些其他元素被删除。我不知道这里出了什么问题;为什么不删除正确的迭代器?

我在我的项目中也有一些从 std::vectorcv::vector (来自 OpenCV)的隐式转换,反之亦然,但我删除了它们,被怀疑。

DetectedObject Head:: findTheClosestObjectFromObjects(std::vector<DetectedObject>& objects)
{
float minDistance = 10000;
std::vector<DetectedObject>::iterator closestObjectIt;
DetectedObject closestObject = objects[0];

for(std::vector<DetectedObject>::iterator it = objects.begin(); it != objects.end(); ++it)
{
float distance = computeDistance2((*it));
if (distance < minDistance)
{
minDistance = distance;
closestObject = (*it);
closestObjectIt = it;
}
}
std::cout << "Before erease: " << std::endl;
objects.erase(closestObjectIt);
std::cout << "After erease: " << std::endl;

return closestObject;
}

最佳答案

上面的代码看起来不错,您是否尝试查看DetectedObject 的复制赋值运算符?当您删除一个元素时,这是用于(在 c++03 中)移动 vector 中的其他元素的元素,因此此处的错误将停止 erase 正常运行。

关于c++ - std::vector::erase() 删除错误的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23599420/

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