@[Micro_Seven](/user/291358) 为什么说“这样写才对”?你之前使用 `sort(nums,nums+size)` 错了吗?怎么错的?
by 木木! @ 2019-12-16 11:52:05
@[木木!](/user/49458) 这个数组的结束下标是size-1,这样写应该会越界访问啊?为什么没报错?起始下标不应该是0吗?那应该是
```cpp
sort(nums+0,sums+size-1);
```
但这个我试过了,没有完全排序整个数组。(忽略了下标为0的)
by Micro_Seven @ 2019-12-16 11:55:20
@[Micro_Seven](/user/291358) `sort` 函数接受两个迭代器(可以理解为指针),排序的区域是左闭右开的,如果是排序 `[0,n-1]` 之间的数字的话,应该是 `sort(num,num+size)`,而不是`sort(num,num+size-1)`(
另外,“忽略了下标为0的”是什么错误?
by 木木! @ 2019-12-16 11:58:14
@[木木!](/user/49458) 所以,我要排序一个数组的[0,size-1],我应该写
```cpp
sort(数组名,结束下标+1);
```
by Micro_Seven @ 2019-12-16 12:02:51
@[Micro_Seven](/user/291358) 其实是 `sort(起始指针,起始指针+结束下标+1)`,数组名的值就是数组的起始指针(也没多大差别
by 木木! @ 2019-12-16 12:04:14
起始指针=下标0?
by Micro_Seven @ 2019-12-16 12:05:25
@[木木!](/user/49458) 如果只输入数组名
by Micro_Seven @ 2019-12-16 12:05:39
@[Micro_Seven](/user/291358)
看了格式就知道正确写法了:
```
sort(数组名,数组名+排到第几);
```
示例:
```
int a[5]={97,59,65,65,9},i;
sort(a,a+5);//从小到大排序,反过来加cmp
for(i=0;i<=4;i++)
{
cout<<a[i]<<" ";
}
//输出:9 59 65 65 97
```
要从大到小,加cmp(自定义函数)
```
int cmp(int x,int y)
{
return x>y;
}
int a[5]={97,59,65,65,9},i;
sort(a,a+5,cmp);//从大到小排序
for(i=0;i<=4;i++)
{
cout<<a[i]<<" ";
}
//输出:97 65 65 59 9
```
因此,正确写法为:
```
long long nums[size];
for(long long i=0;i<size;i++)cin>>nums[i];
sort(nums,nums+size);
```
by yaoyunhan181 @ 2019-12-16 12:12:37
@[YYH2009](/user/144383) 真心感谢
by Micro_Seven @ 2019-12-16 12:14:27
C++的大多数涉及范围的都是左闭右开区间的,这样理解就行了
by hly1204 @ 2019-12-16 12:15:35