我想从文本文件加载 map (如果您能想出任何其他方式将 map 加载到数组,我愿意接受任何新内容)。
文本文件中写的内容是这样的,但规模有点大。
6 6 10 (Nevermind what this number "10" is but the two other are the map size.)
1 1 1 1 1 1
1 0 2 0 0 1
1 0 0 0 2 1
1 2 2 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1
其中 1 是边界,0 是空的,2 是墙。
现在我想阅读这个文本文件,但我不确定哪种方式最好。
我的想法是:
我的问题是,通过 ram 使用和速度,上述哪种方式(或任何其他方式,如果可用)更好。
注意:天气或不使用 rdbuf() 是一个好方法。我很感激在拆分字符串的不同方法之间进行很好的比较,例如将文本拆分为与空格相关的单词。
最佳答案
您没有足够的数据来通过您提到的任何方式对性能产生重大影响。换句话说,专注于程序的正确性和健壮性,然后再回来优化慢的部分。
输入数据的最佳方法是保持输入流的流动。这通常意味着每个事务读取大量数据,而不是许多小数量的小事务。内存的搜索和处理速度比输入流快得多。
我建议在使用 istream::read
之前使用 rdbuf
。对于任何一个,我建议读入预先分配的内存区域,即数组或如果使用字符串,在构造它时在字符串中保留一个大空间。您不希望 std::string
数据的重新分配减慢您的程序。
由于您的数据是面向行的,这可能是有益的。您读取一行并处理一行。然而,作为开始的好技术,比下面的方法稍微复杂一点,但比前一种方法更简单。
IMO,这是您应该使用的技术。该技术简单易上手;使您能够处理项目的其余部分。
更改数据格式
如果你想让输入更快,你可以改变数据的格式。二进制数据,不需要翻译的数据,是读取速度最快的格式。它绕过了文本格式到内部表示的转换。二进制数据是内部表示。
二进制数据的警告之一是难以读取和修改。
优化
用户。开发时间成本高,不必要的优化浪费开发时间从而浪费金钱。
执行时间处理时间。
关于c++ - rdbuf vs getline vs ">>",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34464705/