使用流在 C++ 中读取可变长度输入

Posted

技术标签:

【中文标题】使用流在 C++ 中读取可变长度输入【英文标题】:reading variable length input in C++ using stream 【发布时间】:2019-11-03 08:58:33 【问题描述】:

我有以下要读入程序的要求。

第一行包含两个以空格分隔的整数,分别表示 p(可变长度数组的数量)和 q(查询的数量)的值。 后续行中的每一行都包含数组中每个元素的空格分隔序列。

随后的每一行都包含两个以空格分隔的整数,分别描述查询的 i(数组中的索引)和 j(由 引用的数组中的索引)的值。

2 2
3 1 5 4
5 1 2 8 9 3
0 1
1 3

在上面的示例中,我有 2 个数组和 2 个查询。第一个数组是 3,3,5,4,第二个数组是 5 1 2 8 9 3。

我的问题是如何在我的容器中读取这些数据。注意:我无法从控制台输入输入,这里有一些测试程序提供输入。

我写的如下

int iNoOfVectors = 0;
    int iNoOfQueries = 0;
    cin >> iNoOfVectors >> iNoOfQueries;
    cout << iNoOfVectors ; 
    vector<vector<int>> container;
    container.reserve(iNoOfVectors);
    for(int i = 0; i < iNoOfVectors; i++ ) 
        int temp;
        std::string line;
        while (std::getline(std::cin, line))
        
            std::cout << line << std::endl;
        
    

上面的输出

2
3 1 5 4
5 1 2 8 9 3
0 1
1 3

如何将可变长度数组元素放入容器中。

谢谢

【问题讨论】:

逐行阅读是一个好的开始。然后您可以将该行放入std::istringstream 并使用std::istream_iterator 到construct a vector。 你能举例说明一下吗 【参考方案1】:

如果你想从一个字符串中读取相似的数据到一个向量中,你需要做以下2个步骤:

将字符串内容放入std::istringstream 使用 std::istream_iterator 遍历 istringstream 中的元素

例子:

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <vector>

int main() 

    // The source string
    std::string stringWithIntegers "5 1 2 8 9 3" ;

    // Build an istringstream with the above string as data source
    std::istringstream iss stringWithIntegers ;

    // Define variable 'data'. Use range constructor and stream iterator    
    std::vector<int> datastd::istream_iterator<int>(iss), std::istream_iterator<int>();

    // Display result
    std::copy(data.begin(), data.end(), std::ostream_iterator<int>(std::cout, "\n"));

    return 0;

也可以复制数据:

    std::vector<int> data;

    std::copy(
        std::istream_iterator<int>(iss),
        std::istream_iterator<int>(),
        std::back_inserter(data)
    );

【讨论】:

以上是关于使用流在 C++ 中读取可变长度输入的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Visual C++ 中启用 VLA(可变长度数组)?

C++ 从可变长度参数列表中提取 std::string

在 C++ 中声明可变长度二维数组的正确方法

c++中有可变长度数组吗?

我们可以在 C++ 中创建可变长度数组吗

为啥我可以在 C++ 中定义这个可变长度数组? [复制]