Инициализация std :: list в недавно выделенной памяти [duplicate]

Мы можем поместить его в list, использовать lengths для создания индекса максимальной длины и извлечь этот элемент из list

lst[which.max(lengths(lst))]

данных

lst <- list(x, y, z)
]
0
задан PaulMcKenzie 20 June 2015 в 15:45
поделиться

1 ответ

Вы не создали массив объектов std::list, когда вы использовали malloc. Все malloc - это выделение памяти из кучи - никаких объектов не создается. Таким образом, попытка использовать ваши std::list, как если бы они были созданы правильно, приведет к неопределенному поведению .

Вы должны использовать контейнер, например std::vector, чтобы сохранить свой список objects:

#include <vector>
#include <list>

class graph
{
    int v;
    std::vector<std::list<int>> adj;
    void dfsutil(int v,bool visited []);
    public:
        graph(int num) : v(num), adj(num) {}
    void addedge(int v,int w);
    void dfs(int v);
};

Обратите внимание: нет необходимости выделять память. Остальная часть вашего кода должна оставаться неизменной, поскольку vector имеет перегрузку operator [] для доступа к элементам.

1
ответ дан PaulMcKenzie 28 August 2018 в 08:12
поделиться