在 C 中检查向量的所有元素是否相等

新手上路,请多包涵

如果我有一个值向量并且想要检查它们是否都相同,那么在 C++ 中有效地执行此操作的最佳方法是什么?如果我用 R 之类的其他语言编程,我想到的一种方法是只返回容器的唯一元素,然后如果唯一元素的长度大于 1,我知道所有元素不可能相同。在 C++ 中,可以这样完成:

 //build an int vector
std::sort(myvector.begin(), myvector.end());
std::vector<int>::iterator it;
//Use unique algorithm to get the unique values.
it = std::unique(myvector.begin(), myvector.end());
positions.resize(std::distance(myvector.begin(),it));
if (myvector.size() > 1) {
    std::cout << "All elements are not the same!" << std::endl;
}

但是在互联网和 SO 上阅读时,我看到了其他答案,例如使用 setfind_if 算法。那么最有效的方法是什么,为什么?我想我的不是最好的方法,因为它涉及对每个元素进行排序,然后调整向量的大小——但也许我错了。

原文由 SJWard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您无需使用 std::sort 。可以用更简单的方式完成:

 if ( std::adjacent_find( myvector.begin(), myvector.end(), std::not_equal_to<>() ) == myvector.end() )
{
    std::cout << "All elements are equal each other" << std::endl;
}

原文由 Vlad from Moscow 发布,翻译遵循 CC BY-SA 4.0 许可协议

C++ 函数在 STL 的库中定义。此函数对整个数组元素范围进行操作,并且可以节省运行循环以逐个检查每个元素的时间。它检查每个元素上的给定属性,并在范围内的每个元素满足指定属性时返回 true,否则返回 false。

 // C++ code to demonstrate working of all_of()
#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
    std::vector<int> v(10, 2);

    // illustrate all_of
    if (std::all_of(v.cbegin(), v.cend(), [](int i){ return i % 2 == 0; }))
    {
        std::cout << "All numbers are even\n";
    }

}

原文由 Target JEE Daaris NITT 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题