Когда вы объявляете vector
следующим образом:
vector< vector<int> > a(n);
, он имеет размер n
. Индексирование в C ++ (и, по сути, в большинстве языков программирования) начинается с 0
и продолжается до n-1
.
Если вы индексируете vector
размером n
с индексом n
(как вы это делаете в своем for l oop), это индекс за пределами границ и вызывает неопределенное поведение. Результатом неопределенного поведения является то, что программа может делать все, что угодно, . Ошибка сегментации на самом деле является хорошим результатом, поскольку вы можете исправить ошибку до того, как произойдет что-нибудь слишком неприятное.
Вы также можете попробовать выполнить индексацию в вектор с помощью .at()
. Это тоже неправильно, но ошибочно другого рода; это определенное поведение, и определено, что оно генерирует исключение std::out_of_range
, сообщающее вам, что именно вы сделали неправильно.