c++ - 索引 2D 矢量使我的程序崩溃
问题描述
我从 txt 文件中获取输入并将其存储在 2D 向量中。那部分工作正常。一旦我尝试访问 2D 矢量的各个元素,我的程序似乎就会出错。根据我的搜索,我以正确的方式索引向量,所以有人知道为什么这会使我的代码崩溃吗?
编辑:我正在正确访问向量。getInput2D() 实际上未能将 temp_vec 附加到 output_vector。那么在这种情况下动态创建二维向量的正确语法是什么?
#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 empty\n";
}
推荐阅读
- html - 数据切换信息传递
- gstreamer - Gstreamer rtsp 没有通过队列拾取音频
- excel - 使用自动筛选从工作表中查找列中的唯一值
- powershell - 使用 powershell 使用真实的实时系统数据操作 URL 标头
- ceph - 监控容器未运行
- python - 如何找到泡菜文件中使用的 Spacy 和 python 的版本?
- amazon-web-services - AWS ECS 集群容量提供程序
- html - 当高度扩展时,从 flexbox 流中取出元素
- php - mySQL 错误“尝试访问类型为 null 的值的数组偏移量”
- if-statement - 如果在另一列 (b) 中找到另一列 (c) 中的值,则在一列 (a) 中输入文本