【问题标题】:Error "No Viable Conversion From Returned Value of Type 'int[2]' to function return type 'vector<int>'"错误“无法从类型 'int[2]' 的返回值到函数返回类型 'vector<int>' 的可行转换”
【发布时间】:2021-12-18 19:14:24
【问题描述】:

这里是编码新手,我在 HackerRank 上有一个问题。它告诉我创建一个函数来比较 2 个数组的元素并在一个数组中返回 2 个值。但是我得到“没有可行的转换”错误。当我将“分数”的类型更改为向量时,出现编译器错误,提示“分段错误”。我想知道这是什么,为什么会发生,以及在哪里可以找到更多相关信息。

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;}

【问题讨论】:

  • vector&lt;int&gt; scores; 创建一个 empty 向量,没有任何元素。向量中的任何索引都将超出范围。
  • 另外,数组和向量是不同的,不能相互转换。
  • 最后,所谓的“竞赛”或“在线评委”网站不是任何类型的教学或学习资源。事实上,试图这样使用它们实际上可能是有害的。不要使用此类网站,而是获取some good books 并上课。

标签: c++ arrays vector


【解决方案1】:

问题是您创建了一个大小为 0 的向量(一个空向量),然后尝试将元素分配给它的第 0 和第 1 个不存在的索引。你应该使用:

//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 时。 其次您应该通过引用传递向量 ab,而不是像我在示例中所做的那样通过值传递。这样会更快。

【讨论】:

  • 你能编辑或重写第一段代码吗?我看不到它
  • 没关系,我现在就试试
  • @HoriaDuna 我已经在我的答案中添加了整个代码块,现在您需要。看看吧。
猜你喜欢
  • 1970-01-01
  • 2021-02-28
  • 2021-09-26
  • 2016-10-25
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
相关资源
最近更新 更多