空でないベクトルに同一の要素が含まれているかどうかをテストしたい。これが最善の方法ですか?
count(vecSamples.begin()+1, vecSamples.end(), vecSamples.front()) == vecSamples.size()-1;
空でないベクトルに同一の要素が含まれているかどうかをテストしたい。これが最善の方法ですか?
count(vecSamples.begin()+1, vecSamples.end(), vecSamples.front()) == vecSamples.size()-1;
C++11 (またはBoost Algorithm )
std::all_of(vecSamples.begin()+1,vecSamples.end(),
[&](const T & r) {return r==vecSamples.front();})
@johnが正しく指摘しているように、最初の2つの要素が異なっていても、ソリューションはコンテナ全体を反復処理します。これは非常に無駄です。
純粋にブーストなしでC++ 11を必要としないソリューションはどうですか?
bool allAreEqual =
find_if(vecSamples.begin() + 1,
vecSamples.end(),
bind1st(not_equal_to<int>(), vecSamples.front())) == vecSamples.end();
等しくない要素が最初に見つかった時点で停止します。これを実行する前に、vecSamples が空でないことを確認してください。
最初の 2 つの要素が異なっていても、ベクトルのすべての要素を常に調べるため、おそらくそうではありません。個人的には、for ループを書くだけです。
ベクターに少なくとも 1 つの要素が含まれている場合:
std::equal(vecSamples.begin() + 1, vecSamples.end(), vecSamples.begin())