我遇到了一个很酷的STL示例,它使用istream_iterators从std输入(cin)复制到向量。
vector<string> col1;
copy(istream_iterator<string>(cin), istream_iterator<string>(),
back_inserter(col));
如何从文件流中直接读入容器?我们只是说一个包含内容的简单文件:
“快速的棕色狐狸跳过懒狗。”我希望每个单词在副本行后面的向量中是一个单独的元素。
答案 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