Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
271 views
in Technique[技术] by (71.8m points)

c++ - Recursive vector return

I already created a function which recursive calling itself to add new elements to vector until vector.size() < 4 and when vector.size() == 4 function returns this modified vector with 4 elements.

However I'm can't figure it out how to modify the code below to get the same result without passing a vector in first call (function should create a new vector in first call and in each next call add new element until vector.size() < 4)

For instance:

  • first call func();, create a vector and push_back(vec.size() + 1), vector items: 1
  • second call func(vec), modify passed vector adding new item, vector items: 1, 2
  • third call func(vec), modify passed vector adding new item, vector items: 1, 2, 3
  • fourth call func(vec), modify passed vector adding new item, vector items: 1, 2, 3, 4
  • return created vector with items: 1, 2, 3, 4 in first call

Code:

#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;
}

Output:

vector items from main: 
1
2
3
4
question from:https://stackoverflow.com/questions/65864801/recursive-vector-return

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You might do:

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...