【问题标题】:How to get integers until \n for n number of lines如何在 n 行中获取整数直到 \n
【发布时间】:2021-12-11 03:28:58
【问题描述】:

我的意见: 第一个输入是输入将包含的行数

5
7 3 29 0
3 4 3 
2 3 4 55 5
2 3
1 2 33 4 5

我的问题是如何将它们存储在向量的向量中......?

我的概念..

.
.
.
cin>>n;
vector<vector<int>>vec;
while(n--)
{
    vector<int>vec2;
    for(**Getting input until the line**){
    vec2.emplace_back(input);}
    vec.emplace_back(vec2)
}

我需要实现获取输入直到行。为此,我想将输入作为字符串获取,并在将其转换为 c_string 后使用 strtok 将值存储在向量 vec2 中......但我需要知道是否有任何有效的方法可以克服这个问题..

【问题讨论】:

  • 您的想法实际上非常准确,因为您并不确切知道一行中有多少个数字。对于初学者来说,做你想做的事情并获得整个字符串会容易得多 - 然后对其进行迭代。通过分隔符遍历字符串的一般答案可以在Here 中找到

标签: c++ c++11 vector input stl


【解决方案1】:

这是我的建议,YMMV。

  1. 将每一行读入一个字符串。
  2. 使用istringstream 将字符串中的整数提取到向量中。
  3. 字符串处理后,将push_back向量放入外层向量中。
    unsigned int rows;  
    std::cin >> rows;  
    std::string text_row;  
    for (unsigned int i = 0U; i < rows; ++i)  
    {  
        std::getline(cin, text_row);  
        std::istringstream numbers_stream(text_row);  
        std::vector<int>  row_data;  
        int number;  
        while (numbers_stream >> number)  
        {  
            row_data.push_back(number);  
        }  
        vec.push_back(row_data);  
    }  

【讨论】:

  • 使用emplace_back() 好习惯!
  • 如果emplace_backpush_back 有优势,那为什么push_back 还在比赛中? push_back 有什么独特的功能吗?
  • Small nitpick - 我会将getline() 移动到for 循环条件中,以防万一它失败:for (unsigned int i = 0U; i &lt; rows &amp;&amp; std::getline(cin, text_row); ++i) 我还将更改外部push_back() 以使用std::move() 以避免不必要的副本:vec.push_back(std::move(row_data)); 或者,就像 Zeros 暗示的那样,使用 emplace_back() 代替:auto &amp;row_data = vec.emplace_back(); while (numbers_stream &gt;&gt; number) { row_data.push_back(number); }
猜你喜欢
  • 2023-03-19
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多