5

空でないベクトルに同一の要素が含まれているかどうかをテストしたい。これが最善の方法ですか?

count(vecSamples.begin()+1, vecSamples.end(), vecSamples.front()) == vecSamples.size()-1;
4

4 に答える 4

9

C++11 (またはBoost Algorithm )

std::all_of(vecSamples.begin()+1,vecSamples.end(),
          [&](const T & r) {return r==vecSamples.front();})
于 2013-03-20T18:01:40.977 に答える
4

@johnが正しく指摘しているように、最初の2つの要素が異なっていても、ソリューションはコンテナ全体を反復処理します。これは非常に無駄です。

純粋にブーストなしでC++ 11を必要としないソリューションはどうですか?

bool allAreEqual = 
  find_if(vecSamples.begin() + 1, 
    vecSamples.end(), 
    bind1st(not_equal_to<int>(), vecSamples.front())) == vecSamples.end();

等しくない要素が最初に見つかった時点で停止します。これを実行する前に、vecSamples が空でないことを確認してください。

于 2013-03-20T18:10:43.713 に答える
2

最初の 2 つの要素が異なっていても、ベクトルのすべての要素を常に調べるため、おそらくそうではありません。個人的には、for ループを書くだけです。

于 2013-03-20T17:59:45.380 に答える
1

ベクターに少なくとも 1 つの要素が含まれている場合:

std::equal(vecSamples.begin() + 1, vecSamples.end(), vecSamples.begin())
于 2016-01-22T23:39:35.017 に答える