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

时间:2013-03-20 17:58:00

标签: c++

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

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

5 个答案:

答案 0 :(得分:9)

在c ++ 11(或Boost Algorithm

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

答案 1 :(得分:4)

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

纯粹没有提升无c ++ 11需要解决方案怎么样?

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

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

答案 2 :(得分:2)

可能不是,因为它总是检查向量的所有元素,即使前两个元素不同。就个人而言,我只是写一个for循环。

答案 3 :(得分:0)

如果您的向量包含至少一个元素:

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

答案 4 :(得分:-2)

我会将第一个元素的值减去所有向量元素,然后计算它们的总和并将其与零进行比较。