Похожие вопросы:
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<vector<int> > vvi;
vvi.resize(1);
vvi[0].reserve(1);
vvi[0][0] = 1;
vector<int> vi = vvi[0];
cout << vi[0]; // cout << vvi[0][0]; works
return 0;
}
Это дает мне ошибку в сегменте, и я не могу сказать, почему.
vvi[0].reserve(1);
vvi[0][0] = 1;
Тебе нужно resize
не reserve
,
Доступ к элементу i
где i>=v.size()
является неопределенным поведением. reserve
влияет capacity
не size
,
Если бы я хотел перейти к практическому аспекту, я мог бы предположить, что, возможно, вы могли бы уйти с заданием vvi[0][0] = 1;
(по крайней мере, в режиме релиза). Но главная практическая проблема лежит здесь
vector<int> vi = vvi[0];
Проблема в том, что vvi[0]
размер 0, так vi
размер внутреннего массива равен 0 независимо от vvi[0]
емкость. Вот я и думаю, где вы получаете ошибку сегмента, после того как вы
cout << vi[0]; // cout << vvi[0][0]; works
Но это все домыслы. Правильный ответ на ваш вопрос заключается в том, что это
vvi[0].reserve(1);
vvi[0][0] = 1;
уже имеет неопределенное поведение, и никаких дополнительных соображений не требуется.
Других решений пока нет …