Как вернуть указатель вектора в C ++? - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь вернуть указатель на std::vector из функции следующим образом:

std::vector<int>* find_solution(const std::vector<int>& list)

Я пробовал следующие решения:

const std::vector<int>* find_solution(const std::vector<int>& list)

и

vector<int>* find_solution(const std::vector<int>& list)
{
    //populate solution_list
    std::vector<int>* return_list = new std::vector<int>;
    return_list = &solution_list;
}

где solution_list - имя локального вектора, на который я хотел бы вернуть указатель.Ни один из них не сработал, возвращаемый вектор всегда пуст.Будем очень благодарны за любые советы, но имейте в виду, что программа, вызывающая эту функцию, должна иметь возможность управлять вектором в памяти.Другими словами, возвращение векторного объекта не является жизнеспособным решением.Спасибо!

1 Ответ

0 голосов
/ 20 октября 2018
vector<int>* find_solution(const std::vector<int>& list)
{
    //populate solution_list
    std::vector<int>* return_list = new std::vector<int>;
    return_list = &solution_list;
}

Вы должны использовать выделенный вектор:

vector<int>* find_solution(const std::vector<int>& list)
{
    std::vector<int>* solution_list = new std::vector<int>;

    //populate solution_list

    return solution_list;
}

Когда вы return_list = &solution_list; перезаписываете единственный указатель на выделенную память, поэтому он никогда не может быть освобожден.Кроме того, вы должны вернуть адрес локальной переменной, которая исчезает после завершения функции.

Но вам не нужно динамически выделять std::vector<int>, поскольку он состоит только из нескольких size_t s и указатель на данные.Всего:

vector<int> find_solution(const std::vector<int>& list)
{
    std::vector<int> solution_list;

    //populate solution_list

    return solution_list;
}
...