这是问题所在:https : //www.hackerrank.com/challenges/quicksort1 早些时候,当我开始解决 HackerRank 上的问题时,我使用简单的 for 循环解决了它,如下所示:
#include <iostream>
#include <vector>
using namespace std;
void partition(vector <int> ar){
vector <int> left;
vector <int> right;
int p=ar.at(0);
for (int i=1;i<ar.size();i++){
if (ar.at(i)<=p) left.push_back(ar.at(i));
else if (ar.at(i)>p) right.push_back(ar.at(i));
}
for (int j=0;j<left.size();j++) cout <<left.at(j)<< " ";
cout << ar.at(0)<< " ";
for (int j=0;j<right.size();j++) cout <<right.at(j)<< " ";
}
int main(){
int n;
cin >> n;
vector <int> num;
for (int i=0;i<n;i++){
int temp;
cin >> temp;
num.push_back(temp);
}
partition(num);
return 0;
}
今天我开始了解基于范围的 for 循环,所以我想知道 HackerRank 编译器是否支持它们。我对代码进行了以下更改:
#include <iostream>
#include <vector>
using namespace std;
void partition(vector <int> ar){
vector <int> left;
vector <int> right;
int p=ar.at(0);
for (int i=1;i<ar.size();i++){
if (ar.at(i)<=p) left.push_back(ar.at(i));
else if (ar.at(i)>p) right.push_back(ar.at(i));
}
for (int j : left) cout <<left.at(j)<< " ";
cout << ar.at(0)<< " ";
for (int j : right) cout <<right.at(j)<< " ";
}
int main(){
int n;
cin >> n;
vector <int> num;
for (int i=0;i<n;i++){
int temp;
cin >> temp;
num.push_back(temp);
}
partition(num);
return 0;
}
对于这两种情况,我都遇到了分段错误。
Testcase# 1
Input
5 4 5 3 7 2
Your Output
~ no response on stdout ~
Expected Output
3 2 4 5 7
Compiler Message
Segmentation Fault
Error
terminate called after throwing an instance of 'std::out_of_range' what(): vector::_M_range_check Aborted (core dumped)
Testcase# 2
Input
9 2 10 3 7 9 4 6 12 8
Your Output
2
Expected Output
2 10 3 7 9 4 6 12 8
Compiler Message
Segmentation Fault
Error
terminate called after throwing an instance of 'std::out_of_range' what(): vector::_M_range_check Aborted (core dumped)
我使用基于范围的循环的方式是否有问题,或者 HackerRank 不支持它们。这个页面(https://www.hackerrank.com/environment)说他们使用 g++ 4.7.3,C0x 模式。谢谢