如何在c ++中返回修改后的向量?

时间:2014-04-06 21:00:33

标签: c++

为什么(返回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;
}

5 个答案:

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