在qt中我有两个QList<QPint>,一个叫bullets,一个叫enemys,我要对它们每个x和y都要进行比较如果两个进行比较容器的x,y相同,就要删除这pint,请列出几个比较简便的的代码,要考虑时间复杂度
时间: 2024-02-22 13:55:23 浏览: 118
可以使用Qt的STL算法库中的remove_if函数结合lambda表达式来实现:
```c++
bullets.erase(std::remove_if(bullets.begin(), bullets.end(), [&](const QPoint& pt) {
for (const auto& enemy : enemys) {
if (pt == enemy) {
return true;
}
}
return false;
}), bullets.end());
enemys.erase(std::remove_if(enemys.begin(), enemys.end(), [&](const QPoint& pt) {
for (const auto& bullet : bullets) {
if (pt == bullet) {
return true;
}
}
return false;
}), enemys.end());
```
这段代码使用了remove_if函数和lambda表达式,对bullets和enemys分别进行了比较。这里使用了C++11的auto关键字,可以自动推导变量类型,使用起来比较方便。在lambda表达式中,我们首先遍历另一个容器,与当前元素进行比较,如果相同就返回true,表示需要删除。最后,erase函数将满足条件的元素从容器中删除。这种方法的时间复杂度为O(n^2),不适用于大规模数据处理。
阅读全文