Почему это векторное назначение не работает?

Похожие вопросы:


#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;
}

Это дает мне ошибку в сегменте, и я не могу сказать, почему.

1

Решение

 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;

уже имеет неопределенное поведение, и никаких дополнительных соображений не требуется.

7

Другие решения

Других решений пока нет …