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

Test if all elements of a vector are equal

本文关键字:元素 是否 向量 一个 测试      更新时间:2023-10-16

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

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

c++11(或Boost算法)

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

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

如何一个纯粹的无boost没有c++11要求的解决方案?

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

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

可能不会,因为它总是检查vector的所有元素,即使前两个元素不同。我个人会写一个for循环

如果vector至少包含一个元素:

std::equal(vecSamples.begin() + 1, vecSamples.end(), vecSamples.begin())