Вы допустили простую ошибку, которую легко исправить.
Ваш двумерный вектор
std::vector<std::vector<std::string>> data_extract;
пуст после определения. Это означает, что он не содержит ни одного элемента, ни в каком измерении. Даже не элемент с индексом [0]
или [0][0]
. Итак, у вас есть ошибка, потому что вы обращались к элементу [i]
, который не существует.
Итак, да, как вы и предполагали, вы должны инициализировать вектор. Есть несколько возможностей. Вы можете установить начальный размер, используя конструктор std::vector
, описанный здесь . Номер 3) или 4)
Так, например:
std::vector<std::vector<std::string>> data_extract(array.size());
Что, вероятно, является наиболее ценным решением.
Вы также можете resize
свой вектор после определения
data_extract.resize(array.size());
но это дополнительная строка кода, которая не нужна, потому что вы можете сделать это в конструкторе. Конечно, вы также можете инициализировать оба измерения вашего вектора, если знаете размер второго измерения.
std::vector<std::vector<std::string>> data_extract(array.size(),std::vector<std::string>(array[0].size(),""));
Кстати. Твоя внешность, пока l oop не работает.
while (event_iterator <= nr_of_events)
"Event_iterator" нигде не используется в теле l oop, а внутренние циклы while никогда не запускаются. Это потому, что во 2-м раунде внешнего l oop, "user_id_iterator" уже biiger, чем "array [0] .size ()" и внутренний l oop никогда не запустится.
Также остальная часть логики c трудна для понимания. Я не уверен, почему вы всегда ссылаетесь на «массив [0]».