Есть ли способ добавить элементы в список, как показано? - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь добавить элемент в список в векторе. Ошибка возникает в методе addEdge, поскольку он не может получить доступ к требуемому контейнеру (ошибка сегментации). график - это вектор, в котором каждый контейнер содержит список связанных с ним вершин (и вес этого ребра, который в данном случае равен 0).

Graph(int n, bool directed)
    {
        this->n = n;
        graph.reserve(n);
        this->directed = directed;
        this->m = 0;
    }

    void addEdge(int x, int y)
    {
        graph[x - 1].push_back({y - 1, 0});
        if (!directed)
            graph[y - 1].push_back({x - 1, 0});
        m++;
    }

M - это число ребер, а n - это число количество вершин. Я делал это много раз прежде с простыми массивами, но еще не пробовал с векторами. Класс состоит из:

int n;
int m;
bool directed;
std::vector<std::list<std::pair<int, int>>> graph;

1 Ответ

1 голос
/ 19 января 2020

После graph.reserve(n), graph.size() по-прежнему равен нулю. reserve влияет на емкость вектора, а не на его размер. Тогда graph[x - 1] демонстрирует неопределенное поведение при доступе к индексу за пределами (любое значение x создает индекс за пределами, поскольку вектор пуст).

Вы, вероятно, имели в виду graph.resize(n)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...