【发布时间】:2016-03-31 14:26:43
【问题描述】:
我想从文本文件中加载地图(如果您能想出任何其他方法将地图加载到数组中,我愿意接受任何新事物)。 文本文件中写的内容是这样的,但规模有点大。
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 是墙。 现在我想阅读这个文本文件,但我不确定哪种方式最好。 我现在想到的是:
- 在字符串流中一次读取整个文本文件,稍后通过 rdbuf() 将其转换为字符串,然后拆分字符串并将其放入数组中。
- 通过 getline() 逐个读取。
- 使用 >> 运算符逐个读取。
我的问题是,在 ram 使用和速度方面,哪种方式(或任何其他方式,如果可用)更好。 注意:天气或不使用 rdbuf() 是一个好方法。我很感激在拆分字符串的不同方式之间进行很好的比较,例如将文本拆分为与空格有关的单词。
【问题讨论】:
-
你没看过scanf吗? Using scanf() in C++ programs is faster than using cin? 。问题的答案有 istream 和 scanf 之间的比较。另外,您可以通过将std::ios_base::sync_with_stdio 设置为false 来关闭istream 的同步,但是istream,如果i 不做,istream 只会在输入较大时变慢。但不确定内存使用情况。
-
您是否在互联网上搜索过“stackoverflow c++ 读取文件矩阵”或“stackoverflow 读取文件数组”等重复项?
-
“大一点”有多大?兆字节,还是千兆字节? 0 1 2 是唯一可能的值吗? (即固定宽度的行?)。
-
顺便说一句,有两个性能瓶颈:1)输入(从设备读取)和 2)从文本表示转换为内部表示。除非您的数据以千兆字节为单位,否则我建议不要优化,因为与用户的任何交互都会浪费您通过优化获得的任何时间。
-
@Danny_ds 只是一点点!地图最多 20 kbs。
标签: c++ string file split string-parsing