我想测试非空向量是否包含相同的元素。这是最好的方式吗?
count(vecSamples.begin()+1, vecSamples.end(), vecSamples.front()) == vecSamples.size()-1;
答案 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)
我会将第一个元素的值减去所有向量元素,然后计算它们的总和并将其与零进行比较。