[英]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.