c++ - 将整数行直接读入向量
问题描述
我正在通过 cin 读取文件的内容,我需要解析第一行
该文件如下所示:
1 2 3 4
1->3
2->5
...
所以基本上我的第一步是将第一行读入一个整数向量。
我的方法如下:
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);
然后我遍历字符串以获取单个整数并将它们保存在辅助整数中,然后再推入向量中。我尝试直接将它们放入向量中,但又不可能(至少我这样做的方式)
while (iss >> initial) {
}
有没有一种更简洁的方法可以将由空格分隔的整数组成的 cin 中的一行直接转换为整数向量?
解决方案
我将从头开始:
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>{});
注意:在 的构造函数中使用大括号
istream_iterator
,或在构造函数的至少一个参数周围使用括号v
以避免Most-Vexing-Parse
推荐阅读
- r - 使用 Ruby 和 R 创建 Docker
- sveltekit - SvelteKit 如何在代理下的 fetch url 中省略主机地址
- neo4j - 在 Neo4j Cypher 中添加对象数组之间的关系
- javascript - FullCalendar 事件排序忽略结束
- reactjs - 如何在库中生成 Fluent UI 主题?
- sql - 带有 IF 条件和一个输出的 SELECT 语句
- tensorflow2.0 - 使用 tensorflow 对象检测 API 训练自定义模型时出现警告
- java - url应该是什么
- flutter - Pod 安装错误:CocoaPods 找不到 pod“FirebaseFirestore”的兼容版本
- vue.js - 如何在 vue js 中绑定 span?