【发布时间】:2023-03-09 18:40:01
【问题描述】:
我有一个对象向量。让我们称它们为“myObj”。我需要遍历 myObj 的向量并确定当前对象是否与该向量中的另一个 myObj 交互,如果其中一个对象与另一个对象交互,则删除这两个对象。
for (std::vector<myObj*>::iterator it = objects.begin(); it < objects.end(); ++it)
{
myObj*& r1 = (*it);
myObj*& r2 = (*(it + 1));
if ( r1->interactsWith(r2) )
{
objectInteracted(r1);
objectInteracted(r2);
delete r1;
delete r2;
r1 = NULL;
r2 = NULL;
++it;
}
}
objects.erase(std::remove(objects.begin(), objects.end(), NULL), objects.end()); //Causing "no conversion from const int to myObj"
如您所见,我正在尝试使用 remove-erase 习惯用法将这些对象从矢量中清除。但是,在尝试编译时,出现错误:“C2446 '==': no conversion from 'const int' to 'myObj *'
我更喜欢使用 remove_if 函数,但由于我的谓词需要接受并比较同一向量中的两个元素,所以我不知道如何正确构造谓词。有人可以告诉我为什么会出现编译错误,或者告诉我如何为上述内容构建正确的谓词吗?我已经在 Google 上搜索了好几个小时,但没有发现任何示例表明谓词具有更复杂的行为,例如,从列表中删除奇数,除了当前正在测试的元素之外,自然不需要任何输入。
【问题讨论】:
-
使用调试器并在导致错误的行中修改适当的注释。这样帮助你会容易得多。
-
是否可以选择使用 C++11?
-
抱歉,现在添加评论。导致编译错误的行是 objects.erase(...) 行
-
他实际上并没有从循环内的向量中删除元素。
-
Nemanja Boric,如果 C++11 具有适当的功能,它确实是一种选择。