读取整数行直接进入向量

我正在通过cin读取文件的内容,我需要解析第一行

该文件看起来像:

1 2 3 4
1->3
2->5
...

所以基本上我的第一步是将第一行读入一个int的向量 .

我的方法如下:

std::string line;
std::vector<int> initial;

std::getline(std::cin, line);
std::istringstream iss(line);
int aux;

while (iss >> aux) {
    initial.push_back(aux);
}

这是有效的,我的向量 initial 正确包含第一行的4个整数 . 但是我觉得我正在进行大量的转换,应该可以更直接的方式完成 .

我正在读第一行到字符串,然后将该字符串转换为流,我尝试直接读入流,但编译器抱怨 .

std::istringstream iss();
std::getline(std::cin, iss);

然后我循环遍历字符串以获取单个整数并将其保存在辅助int中,然后将其推入向量 . 我尝试直接将它们放入向量中,但同样不可能(至少按照我的方式进行)

while (iss >> initial) {
}

是否有一种更简洁的方法可以从cin中获取一行直接将空格分隔的整数组成一个整数向量?

回答(1)

2 years ago

我会从最后开始:

while (iss >> initial) { ... }

这很容易使用std::back_inserter工作:

std::vector<int> v;
auto inserter = std::back_inserter(v);

while (iss >> *inserter) { ... }

坦率地说,我可能会保留原样,但如果绝对必须,可以使用std::istream_iterator直接初始化矢量:

std::vector<int> v (std::istream_iterator<int>(iss), std::istream_iterator<int>());