【问题标题】:on the line Sort(arr,arr +n ) , how arr+n specifies end position here?在 Sort(arr,arr +n ) 线上, arr+n 如何在这里指定结束位置?
【发布时间】:2022-01-20 19:37:38
【问题描述】:

这段代码是关于对数组进行排序的:

#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };
    int n = sizeof(arr) / sizeof(arr[0]);
    sort(arr, arr + n);   

    cout << "\nArray after sorting using "
        "default sort is : \n"; 

    //Here I started printing the array
    for (int i = 0; i < n; ++i)
        cout << arr[i] << " ";

    return 0;
}     

很遗憾,我无法理解这一行:

 sort(arr, arr + n);  

arr+n如何在这里指定结束位置?

【问题讨论】:

  • 你在哪里学的#include &lt;bits/stdc++.h&gt;?永远不要那样做。
  • 那我应该用什么代替?
  • 正确的头文件。更多信息:Why should I not #include &lt;bits/stdc++.h&gt;?
  • 这里你只需要#include (用于cout)和#include (用于排序)。

标签: c++ sorting stl


【解决方案1】:

对于数组,数组名 arr 表示迭代器指向数组的第一个元素,+n 将使该迭代器增加 n 个元素。在您的情况下,排序算法应该采用开始迭代器和指向最后一个元素之外的迭代器。

arr:开始迭代器 arr+n:结束迭代器(最后一个元素之后)

通常,算法不会在其范围内计算结束迭代器,所以它是这样的。

【讨论】:

  • 为什么我不能只使用 'n' 而不是 'arr+n'?
  • n 是索引号,arr+n 是迭代器(指向该元素的指针)您的排序算法采用迭代器而不是索引。
【解决方案2】:

标准库的约定是范围必须作为指向第一个元素的迭代器和指向最后一个元素的迭代器提供。

所以你的序列有 10 个元素

 array = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };
 index =>  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 

所以arr[0] 指向第一个元素,arr[10] 指向最后一个元素。

【讨论】:

    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 2019-12-19
    • 2019-03-21
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多