5

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

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

4 回答 4

9

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

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

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

纯粹的 no-boost 不需要 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

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

于 2013-03-20T17:59:45.380 回答
1

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

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