错误 "No Viable Conversion From Returned Value of Type 'int[2]' to function return type 'vector<int>'"
Error "No Viable Conversion From Returned Value of Type 'int[2]' to function return type 'vector<int>'"
这里是编码新手,我有一个关于 HackerRank 的问题。它告诉我创建一个函数来比较 2 个数组的元素和数组中的 returns 2 个值。但是我收到“No Viable Conversion”错误。当我将 'scores' 的类型更改为 vector 时,出现编译器错误,提示“Segmentation Fault”。我想知道的是这是什么,为什么会发生,以及在哪里可以找到更多相关信息。
vector<int> compareTriplets(vector<int> a, vector<int> b) {
int sA = 0, sB = 0;
vector<int> scores;
for(int i = 0; i <3; i++){
if (a[i] > b[i]){
sA++;
}else{
sB++;
}
}
scores[0] = sA;
scores[1] = sB;
return scores;}
问题是您创建了一个大小为 0 的向量(一个空向量),然后试图将元素分配给它的第 0 个和第一个不存在的索引。你应该使用 :
//pass the vector by reference instead of by value
vector<int> compareTriplets(const vector<int> &a,const vector<int> &b) {
int sA = 0, sB = 0;
vector<int> scores(2); //create vector of size 2
for(int i = 0; i <3; i++){
if (a[i] > b[i]){
sA++;
}else{
sB++;
}
}
scores[0] = sA;
scores[1] = sB;
return scores;
}
创建特定尺寸的 std::vector
时。
其次 你应该通过引用传递向量 a
和 b
而不是像我在示例中那样通过值传递。这样会更快。
这里是编码新手,我有一个关于 HackerRank 的问题。它告诉我创建一个函数来比较 2 个数组的元素和数组中的 returns 2 个值。但是我收到“No Viable Conversion”错误。当我将 'scores' 的类型更改为 vector 时,出现编译器错误,提示“Segmentation Fault”。我想知道的是这是什么,为什么会发生,以及在哪里可以找到更多相关信息。
vector<int> compareTriplets(vector<int> a, vector<int> b) {
int sA = 0, sB = 0;
vector<int> scores;
for(int i = 0; i <3; i++){
if (a[i] > b[i]){
sA++;
}else{
sB++;
}
}
scores[0] = sA;
scores[1] = sB;
return scores;}
问题是您创建了一个大小为 0 的向量(一个空向量),然后试图将元素分配给它的第 0 个和第一个不存在的索引。你应该使用 :
//pass the vector by reference instead of by value
vector<int> compareTriplets(const vector<int> &a,const vector<int> &b) {
int sA = 0, sB = 0;
vector<int> scores(2); //create vector of size 2
for(int i = 0; i <3; i++){
if (a[i] > b[i]){
sA++;
}else{
sB++;
}
}
scores[0] = sA;
scores[1] = sB;
return scores;
}
创建特定尺寸的 std::vector
时。
其次 你应该通过引用传递向量 a
和 b
而不是像我在示例中那样通过值传递。这样会更快。