将向量作为对递归函数的引用传递
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
的主要原因之一是完全避免这个问题以上是关于将向量作为对递归函数的引用传递的主要内容,如果未能解决你的问题,请参考以下文章