为2D矢量编制索引会使我的程序崩溃



我从txt文件中获取输入并将其存储在2D矢量中。那部分很好用。当我尝试访问2D矢量的各个元素时,我的程序似乎会出错。从我搜索的内容来看,我正在以正确的方式对向量进行索引,所以有人知道为什么这会破坏我的代码吗?

edit:我正在正确访问矢量。getInput2D((实际上无法将temp_vec附加到output_vvector。在这种情况下,动态创建2D矢量的正确语法是什么?

#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
#include <vector.>
#include <cmath>
using namespace std;
vector<vector<string>> output_vector{};
void getInput2D() { 

ifstream file("C:\Users\ImTheUser\Documents\input.txt");
string line;
vector<string> temp_vec;

if (file.is_open()) { 
while (getline(file, line)) {
if (line[0] != ' ') {
temp_vec.push_back(line);
temp_vec.clear();
}
else {
output_vector.push_back(temp_vec);
temp_vec.clear();
}
}
}
file.close();
}
int main() {

getInput2D();
cout << output_vector[0][0] << endl;
return 0;
}

我正在以正确的方式索引向量,所以有人知道为什么这会破坏我的代码吗?

假设您绝对确定output_vector有1个或多个元素,并且它的第一个元素有1个以上元素,这是访问它们的正确方法:

cout << output_vector[0][0] << endl;

然而,当您从外部资源(文件(读取时,您不能绝对确定向量是否有任何元素,也不应该依赖于这些假设。相反,使用循环:

for (const auto& lines : output_vector) {
for (const auto& line : lines) {
std::cout << line << 'n';
}
}

打印矢量中实际存在的所有元素。或者在之前检查其大小

if (output_vector.size() > 0 && output_vector[0].size() > 0) {
std::cout << output_vector[0][0];
} else {
std::cout << "error. output_vector is emptyn";
}