我想测试非空向量是否包含相同的元素.这是最好的方法吗?
count(vecSamples.begin()+1, vecSamples.end(), vecSamples.front()) == vecSamples.size()-1;
Run Code Online (Sandbox Code Playgroud)
在c ++ 11(或Boost算法)中
std::all_of(vecSamples.begin()+1,vecSamples.end(),
[&](const T & r) {return r==vecSamples.front();})
Run Code Online (Sandbox Code Playgroud)
正如 @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 非空。