对于C++项目,我有一个带有自定义对象的 vector ,这些对象具有一种getX()方法来获取其x值。

我有一个方法,需要遍历属性x在startXendX之间的所有元素。

遍历这些项目的正确方法是什么?

目前我有:

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
}

09-08 09:57