C ++: рекурсивно вставить вектор в анонимный вектор - PullRequest
0 голосов
/ 24 ноября 2018

Моя цель - создать вектор с шаблоном {1}, заданным max_ = 2, {1,2,1}, заданным max_ = 3, {1,2,1,3,1,2,1}, заданным max_ = 4... etc

Вот мой псевдокод:

std::vector<int> generate_zimin(int max_)
{
    if(max_ == 2)
    {
        return {1};
    }
    else
    {
        return {generate_zimin(max_-1), (max_-1), generate_zimin(max_-1)};
    }
}

Как вставить векторы в анонимный вектор?

edit:

std::vector<int> generate_zimin(std::vector<int> current, int max_)
{
    if(max_ == 2)
    {
        return {1};
    }
    else
    {
        std::vector<int> prev = generate_zimin(current, max_-1);
        current.insert(current.end(), std::begin(prev), std::end(prev));
        current.push_back(max_-1);
        current.insert(current.end(), std::begin(prev), std::end(prev));
        return current;
    }
}

выглядит намного менее элегантно, и я просто пытался этого избежать, но я понимаю, почему я ошибался.

1 Ответ

0 голосов
/ 24 ноября 2018

Мало того, что нет синтаксиса для этого, это плохая идея для производительности.Вы будете распределять и освобождать векторы при каждом вызове функции.Вы должны создать один вектор в начале и использовать его во всех вызовах.Это может повысить производительность в 100 раз.

Вы даже можете рассчитать общий размер вектора в начале и reserve() необходимую емкость.

...