【问题标题】:Simple std::sort not working简单的 std::sort 不起作用
【发布时间】:2016-02-17 13:26:46
【问题描述】:

我有以下代码:

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

【问题讨论】:

  • std::sort(intArr, intArr + 3);
  • 您只对前两个元素进行排序。
  • 为什么有这么多反对票?我相信这是一个不错的问题。
  • 这可能不是一个花哨的问题,也不会进入名人堂,也不会为回答者带来很大的声望,但它一个有效且公式化的问题题;因此没有理由拒绝它。

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


【解决方案1】:

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

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

或者

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

甚至更好:

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

【讨论】:

  • 确定sizeof(intArr)/sizeof(intArr[0])?这正是std::end 版本更好的原因;避免各种常见错误!
  • @Andrew 站立时绝不调试。谢谢纠正。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 2021-03-11
    • 2021-05-18
    • 2018-11-14
    相关资源
    最近更新 更多