如何转换文件格式把EXE文件转化为CPP(C++)的文件并能让编译器读取出来(无源文件)

  1. 在竞赛中遇到大数据时,往往讀文件成了程序运行速度的瓶颈需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头于是从此以后发誓不用cin讀数据。还有人说Pascal的read语句的速度是C/C++中scanf比不上的C++选手只能干着急。难道C++真的低Pascal一等吗答案是不言而喻的。一个进阶的方法是把数据一下孓读进来然后再转化字符串,这种方法传说中很不错但具体如何转换文件格式从没试过,因此今天就索性把能想到的所有的读数据的方式都测试了一边结果是惊人的。  
  2.  竞赛中读数据的情况最多的莫过于读一大堆整数了于是我写了一个程序,生成一千万个随机数到data.txt中一共55MB。然后我写了个程序主干计算运行时间代码如下:  
  3. 最简单的方法就算写一个循环scanf了,代码如下:  
  4. 可是效率如何转换文件格式呢茬我的电脑Linux平台上测试结果为2.01秒。接下来是cin代码如下  
  5. 出乎我的意料,cin仅仅用了6.38秒比我想象的要快。cin慢是有原因的其实默认的时候,cin與stdin总是保持同步的也就是说这两种方法可以混用,而不必担心文件指针混乱同时cout和stdout也一样,两者混用不会输出顺序错乱正因为这个兼容性的特性,导致cin有许多额外的开销如何转换文件格式禁用这个特性呢?只需一个语句std::ios::sync_with_stdio(false);这样就可以取消cin于stdin的同步了。程序如下:  
  6. 取消同步后效率究竟如何转换文件格式经测试运行时间锐减到了2.05秒,与scanf效率相差无几了!有了这个以后可以放心使用cin和cout了  
  7. 接下来让我们測试一下读入整个文件再处理的方法,首先要写一个字符串转化为数组的函数代码如下  
  8. 把整个文件读入一个字符串最常用的方法是用fread,玳码如下:  
  9. 上述代码有着惊人的效率经测试读取这个数只用了0.29秒,效率提高了几乎10倍!掌握着种方法简直无敌了不过,我记得fread是封装過的read如果直接使用read,是不是更快呢代码如下:  
  10. 测试发现运行时间仍然是0.29秒,可见read不具备特殊的优势到此已经结束了吗?不我可以調用Linux的底层函数mmap,这个函数的功能是将文件映射到内存是所有读文件方法都要封装的基础方法,直接使用mmap会怎样呢代码如下:  
  11. 经测试,运行时间缩短到了0.25秒效率继续提高了14%。到此为止我已经没有更好的方法继续提高读文件的速度了回头测一下Pascal的速度如何转换文件格式?结果令人大跌眼镜居然运行了2.16秒之多。程序如下:  
  12. 为确保准确性我又换到Windows平台上测试了一下。结果如下表:方法/平台/时间(秒)  
  13. VC对cin取消同步与否不敏感前后效率相同。反过来MINGW则非常敏感前后效率相差8倍。  
  14. 希望此文能对大家有所启发欢迎与我继续讨论。  

就是如何转换文件格式把cpp那些文件弄成exe双击直接执行那种

就是如何转换文件格式把cpp那些文件弄成exe,双击直接执行那种

我要回帖

更多关于 文档转换成pdf文件 的文章

 

随机推荐