将整数行直接读入向量

时间:2018-12-10 10:57:00

标签: c++ vector cin

我正在通过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中将由空格分隔的整数组成的一行直接直接转换成整数向量?

1 个答案:

答案 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>());