Функция size()
пустого вектора вернет (без знака) значение ноль , и в вашем внутреннем l oop вы протестируете y
против vec[x].size() - 1
. Это даст значение, которое «недополучено» и, следовательно, будет иметь значение максимум , которое может содержать переменная size_t
, поэтому y
l oop будет выполняться очень большое количество раз! Тем не менее, он, скорее всего, потерпит неудачу на первом l oop, потому что попытка получить доступ к любому элементу пустого vector
означает неопределенное поведение .
Чтобы это исправить, заключите свой внутренний l oop в блок if
"is is empty" (фактически, вы должны сделать это для обоих циклов). Вот возможное решение:
template<typename s>
void vecprint2d(const s& vec)
{
cout << "{" << endl;;
if (!vec.empty()) for (size_t x = 0; x < vec.size(); x++) {
cout << "{";
if (!vec[x].empty()) {
for (size_t y = 0; y < vec[x].size() - 1; y++) {
cout << vec[x][y] << ", ";
}
cout << vec[x][vec[x].size() - 1];
}
cout << "}" << endl;
}
cout << "}" << endl;
}
Не стесняйтесь просить дальнейших разъяснений и / или объяснений.