将向量作为对递归函数的引用传递

Posted

技术标签:

【中文标题】将向量作为对递归函数的引用传递【英文标题】:Passing a vector as a reference to a recursive function 【发布时间】:2016-10-18 07:45:59 【问题描述】:

我已经构建了一个函数,它接受对向量的引用作为参数,它看起来像这样:

void func(std::vector<int> &vec) 
   // sth. to do

但我希望该函数是递归的,并使用原始向量的一部分调用自身。

void func(std::vector<int> &vec) 
    // sth. to do
    func(part of the orignial vector);

如何从我的原始向量构造一个新向量?重要的是,当我在递归调用中修改向量的一部分时,原始向量“vec”也发生了这种变化,所以我不想传递副本或新向量。 感谢您的帮助。

【问题讨论】:

传递几个迭代器。这就是所有standard algorithms 的运作方式。然后很容易传递原始输入范围的任何子范围。 或“旧方式”,您可以将开始/结束索引与数组一起传递。 或range-v3,传递一个范围而不是一个向量 【参考方案1】:

老办法!

void func(std::vector<int> &vec,int l,int r) 
    // this function modifies only vec fro indices l to r. 
    //
    // do what you want
    //
    //
    func(vec,new_l,new_r);

【讨论】:

考虑使用size_t作为索引,否则如果向量大小超过INT_MAX,代码可能会被利用。实际上,更喜欢使用vector::iterator 的主要原因之一是完全避免这个问题

以上是关于将向量作为对递归函数的引用传递的主要内容,如果未能解决你的问题,请参考以下文章

在递归函数的函数调用中修改通过引用传递的参数

通过引用传递向量使迭代算法以不同的方式运行

C ++将向量传递给函数:引用与指针,哪个是首选? [复制]

值传递和引用传递的区别

通过引用函数传递向量,但更改不会持续

通过引用传递向量内联