简单的std :: sort无效

时间:2015-11-16 12:34:29

标签: c++ arrays sorting c++11 visual-c++

我有以下代码:

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)。

2 个答案:

答案 0 :(得分:6)

在采用范围的STL算法中,如果要提供整个范围,则必须提供一个结尾的元素而不是范围本身的结尾,因此在您的情况下:

std::sort(intArr, intArr + 3);

或者

std::sort(intArr, intArr + sizeof(intArr) / sizeof(int));

甚至更好:

std::sort(std::begin(intArr), std::end(intArr));

答案 1 :(得分:2)

数组中有3个值,但只发送2个(因为在STL算法中第二个参数是past-end iterator)。 应该是

std::sort(intArr, intArr + 3);