首页 文章

如何使用std :: copy直接从文件流读取到容器?

提问于
浏览
4

我遇到了一个很酷的STL示例,它使用istream_iterators从std输入(cin)复制到向量 .

vector<string> col1;
copy(istream_iterator<string>(cin), istream_iterator<string>(),
    back_inserter(col));

我如何做类似的事情从文件流直接读入容器?让我们说一个包含内容的简单文件:

“快速的棕色狐狸跳过懒狗 . ”

我希望每个单词都是复制行后面向量中的一个单独元素 .

3 回答

  • 6

    成功打开文件后,将 cin 替换为文件流对象:

    ifstream file("file.txt");
    
    copy(istream_iterator<string>(file), istream_iterator<string>(),
                                                     back_inserter(col));
    

    实际上,您可以将 cin 替换为任何C标准输入流 .

    std::stringstream ss("The quick brown fox jumped over the lazy dogs.");
    
    copy(istream_iterator<string>(ss), istream_iterator<string>(),
                                                     back_inserter(col));
    

    知道了吗? col 将包含您传递给 std::stringstream 的字符串的单词 .

  • 3

    与fstream实例完全相同而不是cin .

  • 11

    我不认为复制函数是必需的,因为向量具有带有begin和end作为迭代器的构造函数 .

    因此,我认为这对你来说没问题:

    ifstream file("file.txt");
    vector<string> col((istream_iterator<string>(file)), istream_iterator<string>());
    

    冗余()是删除Most_vexing_parse

相关问题