测试向量的所有元素是否相等

Nei*_*irk 3 c++

我想测试非空向量是否包含相同的元素.这是最好的方法吗?

count(vecSamples.begin()+1, vecSamples.end(), vecSamples.front()) == vecSamples.size()-1;
Run Code Online (Sandbox Code Playgroud)

sba*_*bbi 9

在c ++ 11(或Boost算法)中

std::all_of(vecSamples.begin()+1,vecSamples.end(),
          [&](const T & r) {return r==vecSamples.front();})
Run Code Online (Sandbox Code Playgroud)


Ed *_*rbu 4

正如 @john 正确指出的那样,即使前两个元素不同,您的解决方案也会迭代整个容器,这是相当浪费的。

一个纯粹的无提升、不需要 c++11 的解决方案怎么样?

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

在找到第一个不相等元素时停止。运行此命令之前,请确保您的 vecSamples 非空。