我想测试一个非空向量是否包含相同的元素。这是最好的方法吗?
count(vecSamples.begin()+1, vecSamples.end(), vecSamples.front()) == vecSamples.size()-1;
我想测试一个非空向量是否包含相同的元素。这是最好的方法吗?
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 正确指出的那样,即使前两个元素不同,您的解决方案也会迭代整个容器,这非常浪费。
纯粹的 no-boost 不需要 c++11 的解决方案怎么样?
bool allAreEqual =
find_if(vecSamples.begin() + 1,
vecSamples.end(),
bind1st(not_equal_to<int>(), vecSamples.front())) == vecSamples.end();
在找到的第一个不相等元素处停止。在运行之前确保你的 vecSamples 是非空的。
可能不会,因为它总是检查向量的所有元素,即使前两个元素不同。就我个人而言,我只想写一个 for 循环。
如果您的向量包含至少一个元素:
std::equal(vecSamples.begin() + 1, vecSamples.end(), vecSamples.begin())