这是我必须遵循的要求:
将有一个 C 风格或 C++ 风格的字符串来保存这个词。一个 int 来保存每个单词的计数。包含这两者的结构或类。这个结构/类将被插入到一个 STL 列表中。您还需要一个 C 样式或 C++ 样式字符串来保存从文件中读取的文本行。您将根据分配规范中的单词定义将此行解析为单词。
第一部分看起来不错,但在第二部分中,我仍然不明白阅读一行然后将其解析成一个单词的意义。它比使用直接从文本文件中读取一个单词更有效吗?
这是我必须遵循的要求:
将有一个 C 风格或 C++ 风格的字符串来保存这个词。一个 int 来保存每个单词的计数。包含这两者的结构或类。这个结构/类将被插入到一个 STL 列表中。您还需要一个 C 样式或 C++ 样式字符串来保存从文件中读取的文本行。您将根据分配规范中的单词定义将此行解析为单词。
第一部分看起来不错,但在第二部分中,我仍然不明白阅读一行然后将其解析成一个单词的意义。它比使用直接从文本文件中读取一个单词更有效吗?
效率取决于单词的定义(来自assignment spec。):如果您需要多次检查linem以确定单词的开始/结束位置(即属于单词的位置),则更多有效地将行保留在内存中,然后从磁盘执行多次读取(尽管 I/O 缓存可以减少对性能的影响)。
即使没有性能提升,这是一项家庭作业,我认为您被要求这样做是为了学习 1)如何从文件中读取字符串(行);2)如何解析内存中的字符串。要同时实现这两个目标,你有这个要求
根据您的用例,逐行读取文件可能很有用。
首先读取内存中的整个文件,然后再解析它不会最小化内存使用量。程序运行所需的内存至少是文件的大小。如果输入文件与程序可用的内存相比很大,您将无法分配足够的内存来存储整个文件(尝试分配 20GB 的字符串以查看会发生什么)。
另一方面,如果您逐行读取,则一次只需要在内存中一行的大小:您可以立即释放为前几行分配的内存。
因此,在以下情况下,逐行解析很有用:
使用从文件中读取每行fstream
,然后通过检查空间并将其解析为单词,直到loop
.