我从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";
}