【问题标题】:Parse cmd input with fewer lines of code用更少的代码行解析 cmd 输入
【发布时间】:2018-02-27 16:10:37
【问题描述】:

我可以用更少的代码行吗?

    string input;
    getline(cin, input);        
    istringstream ss(input);
    vector<int> v;
    int n;
    while (ss >> n)
    {
        v.push_back(n);
    }

编辑:我将问题编辑得更具体。

【问题讨论】:

  • 这是 c++11 还是 c++14 特定的?
  • 为什么您需要行更少的代码?
  • 也许while循环可以用std::copy(std::istream_iterator&lt;int&gt;(ss), std::istream_iterator&lt;int&gt;(), std::back_inserter(v));完成
  • 您相信用户只输入int 类型(以空格分隔)。没有进行错误检查。也许你真的想要更多行代码?
  • @OlafDietsche - 这是一个答案,而不是评论。

标签: c++ input getline


【解决方案1】:

while 循环 - 从输入流中读取,并将值放入容器中 - 可以替换为 std::copy

std::copy(std::istream_iterator<int>(ss), std::istream_iterator<int>(),
          std::back_inserter(v));

其中std::istream_iterator&lt;int&gt;(ss) 表示输入的开始,std::istream_iterator&lt;int&gt;() 是输入的结束,最后std::back_inserter(v) 是值所在的位置(执行 v.push_back())。

不过,请记住,这会破坏非数字输入。


另见std::copy - Parameters

参数
first、last - 要复制的元素范围
d_first - 目标范围的开始。

std::back_inserter 或者更确切地说是std::back_insert_iterator

【讨论】:

    猜你喜欢
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多