程序总是返回0

时间:2015-03-13 22:20:49

标签: c++

编译时没有错误,没有警告,但程序(我的矢量数组)总是返回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);
    }
}

有人可以告诉我怎样才能解决这个问题? 谢谢!

1 个答案:

答案 0 :(得分:1)

您只修改了原始矢量的副本

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

所以当你在函数中执行此操作时:

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

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

解决方案:通过reference传递矢量,以便能够修改原始矢量:

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

在使用前学习该语言。