我正在通过cin读取文件的内容,我需要解析第一行
文件如下:
$(document).ready(function () {
$(document).scroll(function() {
var dataval = parseInt($('.progress').attr("data-amount"));
if (dataval < 100) {
$('.progress .amount').css("width", 0 + dataval + "%");
}
function modifyProgressVal(type) {
dataval = parseInt($('.progress').attr("data-amount"));
if (type == 1) dataval = Math.min(100,dataval + 10)
else if (type == -1) dataval = Math.max(0,dataval - 10);
$('.progress .amount').css("width", 100 - dataval + "%");
$('.progress').attr("data-amount", dataval);
}
}
所以基本上,我的第一步是将第一行读入一个整数向量。
我的方法如下:
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);
}
正确包含第一行的4个整数。
但是我觉得我正在做很多转换,应该可以更直接地完成。
我正在将第一行读取为字符串,然后将其转换为流,我尝试直接读取为流,但是编译器抱怨。
initial
然后,我遍历字符串以获取各个int并将其保存在辅助int中,然后再推入向量中。 我试图直接将它们放入向量中,但再次不可能(至少是我这样做的方式)
std::istringstream iss();
std::getline(std::cin, iss);
有没有一种更干净的方法来从cin中将由空格分隔的整数组成的一行直接直接转换成整数向量?
答案 0 :(得分:4)
我将从头开始:
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>());