Когда вы пишете adj[0]
, вы неявно предполагаете, что вектор имеет размер по крайней мере 1, чтобы существовал нулевой элемент.Это не относится к пустому вектору, например, недавно инициализированному.К сожалению, это не гарантирует какую-либо ошибку, это неопределенное поведение, и компилятор может позволить буквально что-нибудь случиться.Чтобы избежать этого, вам нужно освободить место для этих элементов, что можно сделать несколькими способами:
adj.resize(2); // now size == 2, and [0] and [1] can be safely accessed
adj[0].push_back(1);
adj[1].push_back(3);
или, альтернативно,
adj.push_back({}); // append default-constructed vector
adj.back().push_back(1); // append 1 to the above vector
или, возможно, наиболее кратко:
adj = {
{1, 2},
{3, 4, 5}
};
// adj now contains two vectors containing {1, 2} and {3, 4, 5} respectively
Если вы хотите использовать индексный оператор []
для индексированного доступа к вектору, рассмотрите возможность использования vector.at()
, который выполняет те же функции, но выдает исключение, если индексвне диапазона.Это может быть очень полезно для отладки.