从文件读取时使用插入迭代器 [英] Using Insert Iterators when reading from file

查看:128
本文介绍了从文件读取时使用插入迭代器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您可以使用 Insert Iterators 从文件读取数据到STL容器吗?



例如:

  FILE * stream; 
fread(back_inserter(std :: list),sizeof(int),1,stream);


解决方案

C ++流与C stdio流不兼容。换句话说,你不能在C ++迭代器中使用 FILE * 或者 fread 。但是,如果您使用C ++ std :: fstream 设施以及 istream_iterator ,您可以使用插入迭代器插入到C ++容器中。

假设您有一个输入文件input.txt,其中包含由空格分隔的ASCII文本编号,您可以执行:

  #include< iostream> 
#include< fstream>
#include< vector>
#include< iterator>

int main()
{
std :: ifstream ifs(input.txt);
std :: vector< int> VEC;
//从磁盘读取数字
std :: copy(std :: istream_iterator< int>(ifs),std :: istream_iterator< int>(),std :: back_inserter(vec)) ;
//现在输出整数
std :: copy(vec.begin(),vec.end(),std :: ostream_iterator< int>(std :: cout,\\\
) );
}


can you use Insert Iterators while reading from a file to put the data into STL container?

for example:

FILE *stream;
fread(back_inserter(std::list), sizeof(int), 1, stream);

解决方案

C++ streams are not compatible with C stdio streams. In other words, you can't use C++ iterators with FILE* or fread. However, if you use the C++ std::fstream facilities along with istream_iterator, you can use an insertion iterator to insert into a C++ container.

Assuming you have an input file "input.txt" which contains ASCII text numbers separated by whitespace, you can do:

#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>

int main()
{
 std::ifstream ifs("input.txt");
 std::vector<int> vec;
    // read in the numbers from disk
 std::copy(std::istream_iterator<int>(ifs), std::istream_iterator<int>(), std::back_inserter(vec));
    // now output the integers
 std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, "\n"));
}

这篇关于从文件读取时使用插入迭代器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆