我有以下代码:
int main()
{
int intArr[] = { 1,5,3 };
//auto f = [](auto a, auto b) {return a < b;};
//std::sort(intArr, intArr + 2, f);
std::sort(intArr, intArr + 2);
for (int& temp : intArr)
cout << temp << endl;
}
但是,输出未排序(例如,输出为 1 5 3
)。将 std::sort
与 lambda 一起使用时的结果相同。是什么导致了这种行为?
我正在使用 Visual C++ 编译器 (Visual Studio 2015)。
最佳答案
在采用范围的 STL 算法中,如果你想提供整个范围,你必须给出一个结束元素,而不是范围本身的结束,因此在你的情况下:
std::sort(intArr, intArr + 3);
或者
std::sort(intArr, intArr + sizeof(intArr) / sizeof(int));
或者更好:
std::sort(std::begin(intArr), std::end(intArr));
关于c++ - 简单的 std::sort 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33735529/