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

时间:2011-08-22 19:19:08

标签: c++ stl

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

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

如何从文件流中直接读入容器?我们只是说一个包含内容的简单文件:

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

我希望每个单词在副本行后面的向量中是一个单独的元素。

3 个答案:

答案 0 :(得分: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的字符串的单词。

答案 1 :(得分:6)

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

答案 2 :(得分:3)

我不认为复制函数是必需的,因为向量有一个构造函数,其中begin和end是迭代器。

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

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

冗余()是删除Most_vexing_parse