在 Sort(arr,arr +n ) 行中,arr+n 是如何在此处指定结束位置的?
on the line Sort(arr,arr +n ) , how arr+n specifies end position here?
这段代码是关于对数组进行排序的:
#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
在这里指定结束位置?
对于数组,数组名称 arr 表示指向数组第一个元素的迭代器,+n 会将迭代器递增 n 个元素。在您的情况下,排序算法应该采用开始迭代器和指向最后一个元素之后的迭代器。
arr: 起始迭代器
arr+n:结束迭代器(超出最后一个元素)
通常,算法不计算其范围内的结束迭代器,所以它是这样的。
标准库的约定是范围必须作为指向第一个元素的迭代器和指向最后一个元素之后的迭代器提供。
所以你的序列有 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]
指向最后一个元素之后的元素。
这段代码是关于对数组进行排序的:
#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
在这里指定结束位置?
对于数组,数组名称 arr 表示指向数组第一个元素的迭代器,+n 会将迭代器递增 n 个元素。在您的情况下,排序算法应该采用开始迭代器和指向最后一个元素之后的迭代器。
arr: 起始迭代器 arr+n:结束迭代器(超出最后一个元素)
通常,算法不计算其范围内的结束迭代器,所以它是这样的。
标准库的约定是范围必须作为指向第一个元素的迭代器和指向最后一个元素之后的迭代器提供。
所以你的序列有 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]
指向最后一个元素之后的元素。