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

How do I return a modified vector in c++?

本文关键字:修改 向量 返回 c++      更新时间:2023-10-16

为什么(返回 A;)不工作?我收到的错误是"没有可用的用户定义的转换运算符可以执行此转换,或者无法调用该运算符。

如何返回新排序的向量?

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

您可以使用以下两种方法之一来解决此问题:

1) 将函数的返回类型更改为向量

vector<int> sort(vector <int> A, int n){
    // body of function
}

2) 将对向量的引用作为参数传递。它将影响函数原型,如下所示

int sort(vector <int> &A, int n){
    // body of function
}

将方法声明更改为:

vector <int> sort(vector <int> A, int n)

当您的返回类型当前为int时,您正在尝试返回vector<int>

您只能从 C/C++ 中的函数返回声明类型的值。
无论如何,在您的情况下,正确的选择不是返回向量,而是通过引用传递它,因此您可以修改原始向量。因此更改您的原型:

void sort(vector<int>& A)

我也删除了n,因为向量知道它的大小。

此外,如果您不想更改它,为了提高效率,请考虑将 const 限定的引用传递给原始引用。但是,对于易于复制的小型基本类型,不要这样做。

更改

int sort(vector <int> A, int n)

vector<int> sort(vector <int> A, int n)

如果您想返回 A。

或者,您可以改用传递 byref。

使用此代码。

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