RDBUF vs Getline vs ">>"
rdbuf vs getline vs ">>"
我想从文本文件加载映射(如果你能想出任何其他方法将映射加载到数组,我愿意接受任何新的方法)。文本文件中所写的内容与此类似,但规模稍大。
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()逐个读取
- 使用>>运算符逐个读取
我的问题是,从冲头的使用和速度来看,上述哪种方式(或任何其他方式(如果可用))更好。注意:天气或不使用rdbuf()是一个好方法。我希望能很好地比较不同的字符串分割方式,例如将文本分割为与空白有关的单词。
其中1是边界,0是空的,2是墙。现在我想阅读这个文本文件,但我不确定哪种方式是最好的。我现在想的是:
您没有足够的数据来通过您提到的任何方法对性能产生重大影响。换句话说,把注意力集中在程序的正确性和健壮性上,然后再回来优化那些速度较慢的部分。
在字符串流中一次读取整个文本文件,稍后通过rdbuf()将其转换为字符串,然后拆分字符串并将其放入数组中。
输入数据的最佳方法是保持输入流的流动。这通常意味着每个事务读取大块数据,而不是读取许多少量的小事务。内存的搜索和处理速度比输入流快得多。
我建议在使用rdbuf
之前先使用istream::read
。对于这两种情况,我建议读取预分配的内存区域,即数组,或者如果使用字符串,则在构造字符串时在字符串中保留较大空间。您不希望std::string
数据的重新分配会减慢程序速度。
通过getline()逐个读取。
由于您的数据是面向行的,因此这可能是有益的。您读取一行并处理该行。然而,一开始的好方法比下面的方法复杂一些,但比前面的方法简单一些。
使用>>运算符逐个读取。
IMO,这是你应该使用的技术。该技术简单易用;使您能够处理项目的剩余部分。
更改数据格式
如果您想加快输入速度,可以更改数据的格式。二进制数据,不需要翻译的数据,是读取速度最快的格式。它绕过了文本格式到内部表示的翻译。二进制数据是内部表示。
二进制数据需要注意的一点是,它很难读取和修改。
优化
- 不要。专注于完成项目:正确而稳健
- 不要。通常,您获得的时间浪费在等待I/O或用户。开发时间是昂贵的,不必要的优化是对开发时间的浪费,因此是对金钱的浪费
- 配置文件您的可执行文件。优化占用最多的零件执行时间
- 在更改代码之前减少需求/功能
- 在更改代码之前优化设计或体系结构
- 在更改代码之前更改编译器优化设置
- 更改数据结构&用于缓存优化的对齐
- 如果程序绑定了I/O,则优化I/O
- 减少执行流中的分支/跳转/更改
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- Confusion: decltype vs std::function
- 将IBM Rhapsody模型集成到VS 2019中
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- EASTL矢量<向量<int>>连续的
- 修改 VS Code 中的默认C++代码段
- 如何使用c++在VS 2019上运行SQL查询
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- 完美前进使用 std::forward vs RefRefCast
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- consteval wrapper vs. source_location
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- QStringList vs list<shared_ptr<QString>> 性能比较C++