如果我有一个值向量,并想检查它们是否都相同,那么在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的信息时,我会看到其他答案,例如使用set或find_if算法。那么,最有效的方法是什么?为什么?我想我的方法不是最好的方法,因为它涉及到对每个元素进行排序,然后对向量进行大小调整,但我可能是错的。
谢谢,本
您无需使用std::sort。可以用一种更简单的方法来完成:
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; }