无意中看见c++ string与 c char字符串效率的一些争论。

因而就工作中常用到的语句, 自己写了一些比较公平的测试代码, 基本可以看出string 比 c style字符串高效很多。

#include <iostream> #include <windows.h> #include <string> using namespace std; int main() { unsigned int size = 1000000; char * h1 = new char[size]; memset(h1, 'a', size - 1); h1[size - 1] = 0; char * h2 = new char[size]; memset(h2, 'b', size - 1); h2[size - 1] = 0; char * h3 = new char[size]; memset(h3, 'c', size - 1); h3[size - 1] = 0; char * r1 = new char[ 3 * size + 3]; int e = 0; size_t time = GetTickCount(); e += sprintf(r1 + e, "%s", h1); e += sprintf(r1 + e, "%s", h2); e += sprintf(r1 + e, "%s", h3); time = GetTickCount() - time; cout <<"C style1 time is: " <<time <<" ms." << "length: " << strlen(r1) << endl; e = 0; time = GetTickCount(); e = sprintf(r1 + e, "%s%s%s", h1, h2, h3); time = GetTickCount() - time; cout <<"C style2 time is: " <<time <<" ms." << "length: " << strlen(r1) << endl; string r2; string s1(size - 1, 'a'); string s2(size - 1, 'b'); string s3(size - 1, 'c'); time = GetTickCount(); r2 += s1; r2 += s2; r2 += s3; time = GetTickCount() - time; cout <<"C++ style1 time is: " <<time <<" ms." << "length: " << strlen(r2.c_str()) << " size: " << r2.size() << endl; string r3; time = GetTickCount(); r3 += h1; r3 += h2; r3 += h3; time = GetTickCount() - time; cout <<"C++ style2 time is: " <<time <<" ms." << "length: " << strlen(r3.c_str()) << " size: " << r3.size() << endl; return 0; }

测试结果如下:

C style1 time is: 78 ms.length: 2999997
C style2 time is: 79 ms.length: 2999997
C++ style1 time is: 16 ms.length: 2999997
C++ style2 time is: 15 ms.length: 2999997

其中多次测试时发现c++ string给出的时间有时候为0, 可能与string 内部设计相关

string 与 c style 字符串的效率测试相关推荐

  1. StringBuilder 和 String拼接10万个字符串的速度测试差别太大了

    /*** StringBuilder 和 String拼接10万个字符串的速度测试差别太大了* String耗时毫秒: 32693* StringBuilder耗时毫秒: 16*/ public cl ...

  2. 汇编语言: 从键盘上输入一串字符(用回车键结束,使用 10 号功能调用。)放在 STRING 中,试 编制一个程序测试字符串中是否存在数字。如有,则把 CL 的第 5 位置 1,否则将该位置置 0。

    从键盘上输入一串字符(用回车键结束,使用 10 号功能调用.)放在 STRING 中,试 编制一个程序测试字符串中是否存在数字.如有,则把 CL 的第 5 位置 1,否则将该位置置 0. data s ...

  3. js字符串拼接效率问题

    一般来说字符串拼接我们会直接去将String相加,前端一般不考虑效率问题,但是如果数据量大,我们还是要考虑那么亿点点: 这里我们来测试一下字符串拼接和数组拼接后利用join方法生成字符串的效率: 我们 ...

  4. java 字符串拼接优化_JAVA字符串拼接效率

    比较string.stringbuffer.stringbuilder拼接效率 public class MainTest { public static void main(String[] arg ...

  5. C++风格与C风格文件读写效率测试-vs2015,vs2017

    C++风格与C风格文件读写效率测试-vs2015,vs2017 1 void test_write() 2 { 3 const int TEST_SIZE = 100000000; 4 const c ...

  6. Boost:字符串查找子串测试实例

    Boost:字符串查找子串测试实例 实现功能 C++实现代码 实现功能 字符串查找子串测试实例 C++实现代码 #include <string> #include <iostrea ...

  7. Boost:字符串Predicate的测试实例

    Boost:字符串Predicate的测试实例 实现功能 C++实现代码 实现功能 字符串Predicate的测试实例 C++实现代码 #include <string> #include ...

  8. C++longest common string最长公共字符串的实现(附完整源码)

    C++longest common string最长公共字符串的实现 longest common string最长公共字符串实现的完整源码(定义,实现,main函数测试) longest commo ...

  9. java中String值为空字符串与null的判断方法

    Java空字符串与null的区别 1.类型        null表示的是一个对象的值,而不是一个字符串.例如声明一个对象的引用,String a=null.        ""表 ...

最新文章

  1. ajaxFileUpload文件上传
  2. 马斯克雇机器狗勘察火箭爆炸现场,网友:《黑镜》现实版
  3. mysql Tablespace exists解决
  4. SSL 数字证书助力电子商务,让您网络购物更安心
  5. Thread.join()练习
  6. webstorm git 怎么断开版本控制 webstorm git for windows 禁止 自动运行
  7. ESP8266烧写时的各种参数设置
  8. android tls1.2用法,如何添加特定TLSv1.2工作CipherSuits与OkHttp支持 - Android 4.4的奇巧(API 19)...
  9. SQL 日期格式化处理.sql
  10. Java内存区域-运行时数据区域
  11. python强制跳出while循环_python如何跳出while循环
  12. centos7字体颜色改变_CentOS7.3中设置Shell终端文本外观自定义字体
  13. Mat拜耳数据邻域转换算法返回Mat对象,16bit三通道
  14. Legacy(传统)BIOS的历史和不足
  15. 计算机主机显卡装在哪,电脑显卡在主板上的哪个位置?怎么查看显卡的信息和更新驱动程序?...
  16. windows xp 打开文件夹慢的解决
  17. iPhone转Android体验,一直用苹果手机,突然换成安卓是什么体验?网友:差距太大!...
  18. pytorch官方文档(中文版)
  19. 网易云音乐下线:什么都想要,什么都别想要
  20. python语言中、用来安装第三方库的命令_python安装第三方库的方法

热门文章

  1. R-CNN和SPP-net
  2. 类加载器的双亲委派及打破双亲委派
  3. 关于Python编程的一些问答
  4. VLFeat SLIC超像素分割(Cpp版)
  5. 编程之美-寻找最近点方法整理
  6. sql语句之where子句
  7. 软件成本度量方法及CMMI V2.0,你Get到了吗?
  8. 向git库提交代码出现”There are no staged files怎么办?
  9. Hive2.1.0集成Tez
  10. iOS 修改搜索框的样式为白色