【问题标题】:Sort() function of stlstl的sort()函数
【发布时间】:2021-06-03 01:18:49
【问题描述】:

STL 排序函数接受数组的起点和终点两个参数,那么我们为什么要通过

sort(arr,arr+n);

而不是

sort(arr,arr+n-1);

因为n-1是数组的结束指针

【问题讨论】:

    标签: c++ sorting stl


    【解决方案1】:

    容器的结尾由它的end() 迭代器标记,它指向最后一个元素之后而不是最后一个元素。对于指针,它是相同的。 C++ 对大多数算法使用半开区间的约定,即[begin, end) 包括begin 但不包括end

    对你调用的空范围进行排序

     std::sort(arr,arr);
    

    使用您调用的n 元素对范围进行排序

     std::sort(arr,arr+n);
    

    使用[a,b](即包括ab),表示一个空范围就不会那么简单了。

    【讨论】:

    • 我看到很多初学者倾向于使用for (int i = 1: i <= n; ++i),所以与for range的平行可能会有偏差。
    • @Jarod42 我想把“为什么”排除在外,但这个论点很简单,也足够有说服力。
    • 处理空范围点IMO。
    • C++ 不使用半开区间的一个值得注意的地方是 <random> 标头。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多