0

例如,我有一个对象向量,它们都具有属性 PointX,所以我想检查它们是否都具有相同的 PointX 值,如果它们具有它应该返回 true 或 false 什么的。

所以在一种伪代码中:

IF ( Object[1].getPointX() == Object[2].getPoint(x) == Object[3].getPoint(x) ){
      return true;
      }

问题是我有超过 55 个对象,所以必须有一种方法来比较它们而不是单独写它们。我知道必须有一个 for 循环,但我仍然不知道。

提前致谢。

编辑:@awesomeyi 你的建议似乎最简单,更能满足我的需求(我并不是说其他​​人不是,但我认为它们对于像我这样的新手来说太复杂了)但它不起作用,即使 Xpoints 都是一样的或不同,它总是返回 false。这就是我所拥有的:

bool allKilled(){ 
auto checkpointx = Invader[0].getIfActive(); 
for(int i = 0; i < 55; ++i){ 
if(Invader[i].getIfActive() != checkpointx){
 return false;}
}
}

getIfActive() 仅在其真或假时返回,如果所有对象的所有 Active(对象的属性)都为假,我希望此方法返回真。

4

3 回答 3

3

像这样的东西:

auto refx = Object[0].getPointX();
bool b = std::all_of(Object.begin(),
                     Object.end(),
                     [refx](TheTypeOfTHeElements& e) 
                     { return e.getPointX() == ref; });

显然你需要检查它Objects是否为空。

于 2013-11-12T16:37:06.357 回答
1

我会这样做:

template<typename Objects, typename Comparison>
bool is_all_same( Objects&& objects, Comparison&& comp ) {
  using std::begin; using std::end;
  auto&& b = begin(objects);
  auto&& e = end(objects);
  if (b == e)
    return true;
  auto&& first = *b;
  for( auto&& cur = std::next(first); cur != e; ++cur ) {
    if (!comp( first, cur ))
      return false;
  }
  return true;
}

利用:

bool all_same_x = is_all_same( objs, []( Obj const& left, Obj const& right )->bool {
  return left.getPointX() == right.getPointX();
});

whereobjs是一些包含类型对象的容器或范围Obj

上面的代码应该适用于所有标准容器、C 样式数组、支持新 for 循环的自定义容器,并且接近最佳性能。

于 2013-11-12T16:44:45.367 回答
1

循环?

auto checkpointx = Object[0].getPointX();
for(int i = 1; i < Object.size(); ++i){
    if(Object[i].getPointX() != checkpointx)
        return false;
}
于 2013-11-12T16:35:05.143 回答