为什么(返回A;)不起作用?我得到的错误是#34;没有可用于执行此转换的用户定义转换运算符,或者无法调用运算符。"
如何返回新排序的矢量?
int sort(vector <int> A, int n)
{
if( n >= 2 && n <= 43)
{
//sort vector
for(int j=2; j<=n; j++)
{
int tmp = A[j];
int i = j-1;
while (-1<i && tmp < A[i])
{
A[i+1] = A[i];
i--;
}
A[i+1] = tmp;
}
}
return A;
}
答案 0 :(得分:2)
您可以使用以下两种方法之一来解决此问题:
1)将函数的返回类型更改为vector
vector<int> sort(vector <int> A, int n){
// body of function
}
2)将参考传递给参数。它将影响函数原型如下
int sort(vector <int> &A, int n){
// body of function
}
答案 1 :(得分:0)
将您的方法声明更改为:
vector <int> sort(vector <int> A, int n)
当您的返回类型目前为vector<int>
时,您正在尝试返回int
。
答案 2 :(得分:0)
您只能从C / C ++中的函数返回声明类型的值 无论如何,在你的情况下,正确的选择不是返回向量,而是通过引用传递它,所以你可以修改原始向量。因此改变你的原型:
void sort(vector<int>& A)
我也删除了n
,因为向量知道它的大小。
此外,如果您不想更改它,为了提高效率,请考虑将const
- 限定引用传递给原始版本。但是,不要为那些容易复制的小型基本类型做到这一点。
答案 3 :(得分:0)
更改
int sort(vector <int> A, int n)
到
vector<int> sort(vector <int> A, int n)
如果你想返回A。
或者您可以使用pass byref。
答案 4 :(得分:0)
使用此代码。
vector<int> sort(vector <int> A, int n)
{
if( n >= 2 && n <= 43)
{
//sort vector
for(int j=2; j<=n; j++)
{
int tmp = A[j];
int i = j-1;
while (-1<i && tmp < A[i])
{
A[i+1] = A[i];
i--;
}
A[i+1] = tmp;
}
}
return A;
}