编译时没有错误,没有警告,但程序(我的矢量数组)总是返回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);
}
}
有人可以告诉我怎样才能解决这个问题? 谢谢!
答案 0 :(得分:1)
您只修改了原始矢量的副本:
void recursiviteFinal(..., std::vector<int> dest)
~~~~~~~~~~~~~~~~~~~~~
所以当你在函数中执行此操作时:
dest[length - 1] = source[index + length - 1];
它只修改函数退出时被摧毁的向量副本。
解决方案:通过reference传递矢量,以便能够修改原始矢量:
void recursiviteFinal(..., std::vector<int>& dest)
~
在使用前学习该语言。