Ash*_*Roy 1 c++ arrays sorting
我试图解决必须排序的问题,所以我使用了标准库std::sort函数,但是在第二个测试用例中却得到了错误的输出:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n,i;
cin>>n;
int arr[n-1];
for(i=1;i<=n-1;i++)
cin>>arr[i];
int size=sizeof(arr)/sizeof(arr[1]);
sort(arr,arr+size);
for(i=1;i<=n-1;i++)
cout<<arr[i]<<" ";
cout<<endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输入/输出:
2
5
1 2 5 4
10
1 2 3 4 5 6 7 8 10
Run Code Online (Sandbox Code Playgroud)
预期O / P:
1 2 4 5
1 2 3 4 5 6 7 8 10
Run Code Online (Sandbox Code Playgroud)
实际O / P:
1 2 4 5
2 3 4 5 6 7 8 2013562 10
Run Code Online (Sandbox Code Playgroud)
Bla*_*aze 11
首先,int arr[n-1];是一个可变长度的数组。尽管有些编译器仍然可以接受,但实际上这并不是C ++的一部分。在大多数情况下,您可以std::vector<int>(n-1);改用。
但是看一下这个循环:
for(i=1;i<=n-1;i++)
cin>>arr[i];
Run Code Online (Sandbox Code Playgroud)
您从开始1一直到一直到n-1,但是您的数组从arr[0]到到arr[n-2]。因此,您将获得未定义的行为,因为您正在写的数组大小超出了该数组的大小,并且您也未写入第一个位置(当尝试使用仍存在的未初始化值进行排序时,会导致更多未定义的行为)。
相反,该循环应该是for(i=0;i<n-1;i++)相同的。然后可以通过以下方式对向量进行排序:
sort(arr.begin(), arr.end());
Run Code Online (Sandbox Code Playgroud)
还要注意,这样做n-1总是会读入并处理用户输入的少一个值,所以我不确定这是否是您的意图。如果您愿意,也可以n在读完后再减少一,而不是n-1在多个位置写。