代码之家  ›  专栏  ›  技术社区  ›  Sembei Norimaki

将整数行直接读入向量

  •  2
  • Sembei Norimaki  · 技术社区  · 6 年前

    我正在通过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 然而,我觉得我正在做很多转换,这些转换应该可以以更直接的方式完成。

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

    然后我循环遍历字符串以获得单个整数,并将它们保存在一个辅助整数中,然后再放入向量中。 我试着直接把它们放到向量中,但还是不可能(至少我是这样做的)

    while (iss >> initial) {
    }
    

    1 回复  |  直到 6 年前
        1
  •  4
  •   Escape0707 Bartek Banachewicz    5 年前

    我将从结尾开始:

    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