将整数行直接读入向量
Reading line of integers directly into vector
我正在通过 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);
然后我循环遍历字符串以获取各个 int 并将它们保存在辅助 int 中,然后再将其推入向量。
我尝试直接将它们放入向量中,但同样不可能(至少我正在这样做)
while (iss >> initial) {
}
有没有一种更简洁的方法可以从由 space 分隔的整数组成的 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>{});
Note: use braces in the constructor of istream_iterator
, or use parentheses around at lease one of the constructor's parameters of v
to avoid Most-Vexing-Parse
我正在通过 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);
然后我循环遍历字符串以获取各个 int 并将它们保存在辅助 int 中,然后再将其推入向量。 我尝试直接将它们放入向量中,但同样不可能(至少我正在这样做)
while (iss >> initial) {
}
有没有一种更简洁的方法可以从由 space 分隔的整数组成的 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>{});
Note: use braces in the constructor of
istream_iterator
, or use parentheses around at lease one of the constructor's parameters ofv
to avoid Most-Vexing-Parse