我想从文本文件加载 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 是墙。
现在我想阅读这个文本文件,但我不确定哪种方式最好。
我的想法是:
  • 在字符串流中一次性读取整个文本文件,稍后通过 rdbuf() 将其转换为字符串,然后拆分字符串并将其放入数组中。
  • 通过 getline() 逐个读取。
  • 使用 >> 运算符逐个读取它。

  • 我的问题是,通过 ram 使用和速度,上述哪种方式(或任何其他方式,如果可用)更好。
    注意:天气或不使用 rdbuf() 是一个好方法。我很感激在拆分字符串的不同方法之间进行很好的比较,例如将文本拆分为与空格相关的单词。

    最佳答案



    您没有足够的数据来通过您提到的任何方式对性能产生重大影响。换句话说,专注于程序的正确性和健壮性,然后再回来优化慢的部分。



    输入数据的最佳方法是保持输入流的流动。这通常意味着每个事务读取大量数据,而不是许多小数量的小事务。内存的搜索和处理速度比输入流快得多。

    我建议在使用 istream::read 之前使用 rdbuf 。对于任何一个,我建议读入预先分配的内存区域,即数组或如果使用字符串,在构造它时在字符串中保留一个大空间。您不希望 std::string 数据的重新分配减慢您的程序。



    由于您的数据是面向行的,这可能是有益的。您读取一行并处理一行。然而,作为开始的好技术,比下面的方法稍微复杂一点,但比前一种方法更简单。



    IMO,这是您应该使用的技术。该技术简单易上手;使您能够处理项目的其余部分。

    更改数据格式

    如果你想让输入更快,你可以改变数据的格式。二进制数据,不需要翻译的数据,是读取速度最快的格式。它绕过了文本格式到内部表示的转换。二进制数据是内部表示。

    二进制数据的警告之一是难以读取和修改。

    优化

  • 不要。专注于完成项目:正确而稳健。
  • 不要。通常,您获得的时间浪费在等待 I/O 或
    用户。开发时间成本高,不必要的优化浪费开发时间从而浪费金钱。
  • 配置文件 您的可执行文件。优化占用最多的部分
    执行时间处理时间。
  • 在更改代码之前减少需求/功能。
  • 在更改代码之前优化设计或架构。
  • 在更改代码之前更改编译器优化设置。
  • 更改数据结构和对齐以进行缓存优化。
  • 如果您的程序受 I/O 限制,则优化 I/O。
  • 减少执行流程中的分支/跳转/变化。
  • 关于c++ - rdbuf vs getline vs ">>",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34464705/

    10-13 00:51