使用向量时,当返回函数更改时,无法看到输出

Cannot see output when return type of function changes while using vector

本文关键字:输出 函数 向量 返回      更新时间:2023-10-16

在C 中给定以下功能:

ps。仔细注意< =在for循环中,因为向量的大小为[a.size(( 1] [b.size(( 1]

vector<int> lcs2(vector<int> &a, vector<int> &b) 
{
    vector<vector<int> >L(a.size() + 1 , vector<int>(b.size() + 1 , 0));
    for (int i = 0; i <= a.size(); ++i)
    {
        for (int j = 0; j <= b.size(); ++j)
        {
            if (i == 0 || j == 0)
                L[i][j] = 0;
            else if (a[i - 1] == b[i - 1])
                L[i][j] = L[i-1][j-1] + 1;
            else
                L[i][j] = std::max(L[i-1][j], L[i][j-1]);
        }
    }
    int index = L[a.size()][b.size()];
    vector<int> lcs(index + 1);
    int i = a.size() , j = b.size();
    while (i > 0 && j > 0)
    {
        if (a[i - 1] == b[j - 1])
        {
            lcs[index-1] = a[i-1]; 
            i--; j--; index--; 
        }
        else if (L[i - 1][j] > L[i][j - 1])
            --i;
        else
            --j;
    }
    return lcs;
}

当我在main((函数中运行以下命令时:

vector<int> lcs = lcs2(a , b);
std::cout << lcs.size() << std::endl;

我能够在控制台上输出。但是,当我对代码进行以下更改时:

  1. 将LCS2的返回类型更改为INT
  2. 返回lcs.size((,而不是lcs
  3. 将main((中的LCS数据类型从向量更改为int
  4. 将正在从lcs.ize((输出的值更改为lcs

我无法在控制台上获得所需的输出。当我从VSCODE运行构建任务时,我会收到The terminal process terminated with exit code: 3221226356之类的消息。

请帮助我。

ps。在LCS2((中的返回语句之前,如果我添加一个语句以打印LCS.Size((的值,也可以正常工作。

您有一个循环

for (int i = 0; i <= a.size(); ++i)

然后您在循环中访问a[i]。当 i == a.size()时,这是界限的,因此您会得到不确定的行为。

尝试使用at方法(使用a.at(i)而不是a[i],而不是其他每个索引操作(,您将获得异常而不是未定义的行为。