关于sort()的疑问

学术版

@[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


| 下一页