使用C ++ HW项目。我们获得了将目录中的所有.dat文件读入单个.txt文件的代码,然后我们需要从中提取值,而不是特定的顺序。我们得到的代码是:
#if defined(_WIN32)
#define listcmd "dir \b *.dat > datfiles.txt 2>nul"
#endif
这给了我一个文本文件,其中包含的信息远远多于.dat文件名,但是...卷信息,目录路径,文件数据等。
然后我们执行以下操作来阅读文件,但我不明白这是如何工作的:
system(listcmd);
ifstream datfiles("datfiles.txt");
for_each(istream_iterator<string>(datfiles), istream_iterator<string>(), analyze);
datfiles.close();
我一直在查看cplusplus.com上的istream_iterator和for_each页面,但可以使用一些说明。这个for_each语句究竟在做什么?
我认为它正在执行以下操作时是否正确:
答案 0 :(得分:0)
在经历了一个沮丧的周末并且进行了一场疯狂的追逐之后,答案很简单,我应该使用&#34; / b&#34;而不是&#34; \ b&#34;在以下部分中:
#if defined(_WIN32)
#define listcmd "dir \b *.dat > datfiles.txt 2>nul"
#endif
更新后,文本文件会正确创建,并带有非常整齐的.dat文件列表,每行一个。
答案 1 :(得分:0)
for_each
的功能是:
将函数fn应用于[first,last]范围内的每个元素。
此模板功能的行为等同于:
template<class InputIterator, class Function>
Function for_each(InputIterator first, InputIterator last, Function fn)
{
while (first!=last) {
fn (*first);
++first;
}
return fn; // or, since C++11: return move(fn);
}