2011-08-22 87 views
4

我遇到了一个很酷的STL示例,它使用istream_iterators从标准输入(cin)复制到矢量。如何使用std :: copy直接从文件流中读取到容器?

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

我该如何做一些类似的操作,直接从文件流中读取到容器中?我们只是简单的说一下它的内容:

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

我希望每个单词都是复制行之后的矢量中的单独元素。

+2

提示:'的std :: cin'是一个文件流。 –

+0

正是以同样的方式。 –

+0

@BoPersson:'std :: cin'不是'std :: fstream',所以你的评论是不明确的。 –

回答

11

成功打开该文件后,更换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的字符串的单词。

6

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

2

我不认为复制函数是必需的,因为vector有一个以begin和end结构作为迭代器的构造函数。

因此,我认为这是对你OK:

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

冗余()是清除Most_vexing_parse

相关问题