首页 > 解决方案 > 索引 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;
}

标签: c++vector2d-vector

解决方案


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

假设您绝对确定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";
}

推荐阅读