程序返回我总是 0

Program returns me always 0

本文关键字:返回 程序      更新时间:2023-10-16

>我在编译中没有错误,也没有警告,但程序(我的矢量数组)总是返回我 0,为什么?

源代码:

#include <iostream>
#include <vector>
std::vector<int> recursivite(std::vector<int> const source, int const index, int const length);
void recursiviteFinal(std::vector<int> source, int const index, int const length, std::vector<int> dest);
int main()
{
    std::vector<int> myTab  {{ 1, 2, 3, 4,
                                5, 6, 7, 8,
                                9, 10, 11, 12,
                                13, 14, 15, 16,
                                17, 18, 19, 20
                            }};
    std::vector<int> myTab2{{0, 0, 0, 0}};
    myTab2 = recursivite(myTab, 4, 4);
    for (unsigned int i{}; i < myTab2.size(); ++i)
        std::cout << myTab2[i];
}
std::vector<int> recursivite(std::vector<int> const source, int const index, int const length)
{
    std::vector<int> myTab(length);
    recursiviteFinal(source, index, length, myTab);
    return myTab;
}
void recursiviteFinal(std::vector<int> source, int const index, int const length, std::vector<int> dest)
{
    if (length > 0)
    {
        dest[length - 1] = source[index + length - 1];
        recursiviteFinal(source, index, length - 1, dest);
    }
}

有人可以告诉我如何"解决这个问题"?谢谢 !

您只是在修改原始向量的副本

void recursiviteFinal(..., std::vector<int> dest)
                           ~~~~~~~~~~~~~~~~~~~~~

因此,当您在函数中执行此操作时:

dest[length - 1] = source[index + length - 1];

它只修改函数退出时被销毁的向量的副本。

解决方案:通过引用传递向量以便能够修改原始向量:

void recursiviteFinal(..., std::vector<int>& dest)
                                           ~

在使用语言之前先学习它。