首页 > 解决方案 > 为什么此代码给出未处理的异常失败

问题描述

我使用了向量,因为我不知道输入的数量,但它不起作用。我应该怎么办?

vector <string> str;

str[0] = "entity1 ABCDE 2x2 infected";

std::istringstream ss(str[0]);

std::string token;

vector<string> genes;

while (std::getline(ss, token, ' ')) {
    genes.push_back(token);
}
for (int i = 0; i < genes.size(); i++) {
    cout << genes[i];
}

标签: c++

解决方案


在这段代码中:

vector <string> str;
str[0] = "entity1 ABCDE 2x2 infected";

str是空的,因此当您访问第一个元素(在 index 处0)时,您有未定义的行为。您可以通过为向量中的一个字符串分配空间来解决此问题:

vector <string> str(1);

或者直接用一个字符串创建一个向量(这将创建字符串,并将其正确放入向量中):

vector <string> str = {"entity1 ABCDE 2x2 infected"};

但是,从您的示例代码来看,您似乎根本不需要 a vectorhere,一个string就足够了:

string str = "entity1 ABCDE 2x2 infected";
std::istringstream ss(str);

推荐阅读