递归向量返回

Posted

技术标签:

【中文标题】递归向量返回【英文标题】:Recursive vector return 【发布时间】:2021-01-23 21:50:35 【问题描述】:

我已经创建了一个函数,它递归调用自身向向量添加新元素,直到vector.size() < 4 和当vector.size() == 4 函数返回这个带有 4 个元素的修改向量。

但是我不知道如何修改下面的代码以获得相同的结果而不在第一次调用中传递向量(函数应该在第一次调用和每次下一次调用中创建一个新向量添加vector.size() < 4之前的新元素)

例如:

首先调用func();,创建向量和push_back(vec.size() + 1),向量项:1 第二次调用func(vec),修改传递的向量添加新项,向量项:1, 2 第三次调用func(vec),修改传递的向量添加新项,向量项:1, 2, 3 第四次调用func(vec),修改传递的向量添加新项,向量项:1, 2, 3, 4 在第一次调用中返回带有项目的创建向量:1, 2, 3, 4

代码:

#include <iostream>
#include <string>
#include <vector>

using namespace std;


vector<int> func (vector<int>& vec)
    
    if (vec.size() < 4)
    
        vec.push_back((vec.size() + 1));        
        func(vec);    
    
    return vec;


int main()

    vector <int> v;
    vector <int> my_vector = func(v);
    cout << "vector items from main: " << endl;
    for (auto &i : my_vector)
        cout << i << endl;

输出:

vector items from main: 
1
2
3
4

【问题讨论】:

出于可维护性目的,您的函数func 在参数中返回修改后的向量并作为返回值是一个坏主意。假设您首先添加值,使用参数更合适。 【参考方案1】:

你可以这样做:

std::vector<int> func(std::vector<int> vec = )
    
    if (vec.size() < 4)
    
        vec.push_back(vec.size() + 1);        
        vec = func(std::move(vec));    
    
    return vec;

Demo

【讨论】:

【参考方案2】:

你应该这样做:

std::vector<int> func() 
    std::vector<int> result;
    for (int i = 0; i < 4; ++i)
        result.push_back(result.size() + 1);
    return result;

递归在这里根本不合适。

【讨论】:

以上是关于递归向量返回的主要内容,如果未能解决你的问题,请参考以下文章

C ++在向量迭代中删除并返回指向对象的指针

在递归函数 C++ 中创建向量

C ++返回最少许多递归调用的最佳方法

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

C++递归解析树思路

在模板中调整递归嵌套向量的大小