簡體   English   中英

C ++如何檢查向量中存儲的所有對象的元素是否具有相同的值?

[英]C++ how to check if an element of all objects stored in a vector have the same value?

例如,我有一個對象向量,它們都具有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;}
}
}

如果所有對象的所有Active(對象的屬性)都為false,則getIfActive()僅返回其true或false,並且我希望此方法返回true。

像這樣:

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

顯然,您需要檢查Objects是否為空。

循環?

auto checkpointx = Object[0].getPointX();
for(int i = 1; i < Object.size(); ++i){
    if(Object[i].getPointX() != checkpointx)
        return false;
}

我會做這樣的事情:

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();
});

其中objs是一些包含Obj類型Obj容器或范圍。

上面的代碼應該在所有支持新的for循環的標准容器,C樣式數組,自定義容器上工作,並且接近最佳性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM