对于C++项目,我有一个带有自定义对象的 vector ,这些对象具有一种getX()
方法来获取其x值。
我有一个方法,需要遍历属性x在startX
和endX
之间的所有元素。
遍历这些项目的正确方法是什么?
目前我有:
int startX = 20;
int endX = 30
for(SomeClass x: someObject->getObjects())
{
if(x->getX() > startX && x->getX() < endX)
{
//do something
}
}
它可以正常工作,但是我记得在一个古老的C++课中,有一种方法可以更有效地循环遍历元素。
我记得类似的东西:
int startX = 20;
int endX = 30
for(SomeClass x : find(someObject->getObjects(), x, x->getX() > startX && x->getX() < endX)
{
//do something
}
我只在需要的元素上进行迭代,而检查不再在循环内。
编辑:
为了避免讨论该部分,我将qt foreach循环更改为for循环。
最佳答案
您是否在考虑 std::ranges::filter
(的先驱)?
int startX = 20;
int endX = 30;
auto inrange = [startX, endX](auto x){ return x->getX() > startX && x->getX() < endX; }
for(SomeClass x: std::ranges::filter(someObject->getObjects(), inrange))
{
//do something
}