大一学习C语言的时候,书上就写着a = a + b与 a += b等价,但是提倡用后者。

在CSDN上也看到一个关于a+=b和a=a+b的区别的帖子,大概内容如下:
------------------------------------------------------------------------------------------------------------------------------------------
楼主:为什么要强调使用   a+=b   而不建议使用a=a+b
我想在编译上应该是一样的啊
add   a   b
就算是间接寻址也应该一样啊

以下是各位高人的回答:

1 楼mLee79()回复于 2006-11-15 21:14:23 得分 0
打字快些,鉴定完毕   ...

6 楼wanfustudio(雁南飞:知识之败,慕虚名而不务潜修也)回复于 2006-11-15 22:03:26 得分 1
a+=b       这个性能高
作了优化

33 楼miniplayer(为了我的公主)回复于 2006-11-16 10:47:55 得分 0
少打一个a
故节省时间

41 楼Darc(注册真烦)回复于 2006-11-16 12:58:43 得分 0
可以少打一个a.
好处显而易见,第一,Coding速度提高一点点。第二,延长键盘上“A”键的寿命。
----------------------------------------------------------------------------------------------------------------------------------------------

今天在运行一段C++程序的时候,发现效率很低,经过不断的测试,最后发现是循环中的字符串连接(直接使用的a = a + b形式的连接方式)消耗了程序运行的大部分时间,上网查了一下C++中string的方法,有4种方法向string后面加字符和字符串(string a, b):

1. a = a + b;
2. a += b;
3. a.append(b);
4. push_back();    //这个的用法暂时还没去看。

然后我写了一个小程序来测试前三种方法的执行效率:
-------------------------------------------------------------------------------------------------------------------------------------------
string s1,s2,s3;
string str = "abc";

cout << "1 :" ; getTime();                  //时间1,第1个函数运行开始
for(int i = 0; i < n; i++)
{
s1 = s1 + str;
}

cout << "2 :" ; getTime();                  //时间2,第1个结束,第2个开始
for(int i = 0; i < n; i++)
{
s2 += str;
}

cout << "3 :" ; getTime();                  //时间3,第2个结束,第3个开始
for(int i = 0; i < n; i++)
{
s3.append(str);
}
cout << "4 :" ; getTime();                  //时间4,第3个函数运行结束
----------------------------------------------------------------------------------------------------------------------------------------------
当n = 100000的时候,结果如下:
[yurocy@localhost test_programme]$ ./string
1 : 2009/10/15 20:01:07
2 : 2009/10/15 20:01:10
3 : 2009/10/15 20:01:10
3 : 2009/10/15 20:01:10
第一个函数运行用了3秒钟,后面两个的时间可以忽略。

当n = 500000的时候,结果如下:
[yurocy@localhost test_programme]$ ./string
1 : 2009/10/15 20:13:00
2 : 2009/10/15 20:15:50
3 : 2009/10/15 20:15:50
3 : 2009/10/15 20:15:50
第一个函数居然用了2分50秒,后面两个的时间还是1秒以内。

当n = 1000000的时候,等了几分钟,第一个都没运行出来。

差别真是太大了。。。将程序中的 “+” 换成 “+=”,效率马上提高了好几倍。

当然,在Java里面也有这个问题,那就是String和StringBuffer的区别了。

最新文章

  1. JavaScript DOM学习总结(一)
  2. Gedit中文乱码
  3. 二模 (11) day2
  4. [navicat] Navicat for Oracle Cannot load OCI DLL
  5. WooCommerce微信支付插件免费版下载
  6. The message queue
  7. 【转】win7 虚拟机virtualbox中ubuntu12.04安装samba实现文件共享
  8. csms发布步骤
  9. linux0.11学习笔记(2)
  10. (转) 通过input分片的大小来设置map的个数
  11. Maven+SSM框架搭建【spring+springmvc+mybatis】
  12. Spring生态研习【四】:Springboot+mybatis(探坑记)
  13. arcengine新建要素类
  14. Ubuntu下codeblocks不能自动缩进的问题
  15. 你不知道的JavasScript上篇&#183;第五章&#183;原型&#183;上
  16. iOS:ODRefreshControl
  17. C语言编程的环境以及架构
  18. CSS 几款比较常用的翻转特效
  19. jslint
  20. js返回树形结构数据

热门文章

  1. tomcat的安装和优化
  2. hdfs api读写文写件个人练习
  3. 将list分成等数量
  4. POJ2096 Collecting Bugs(概率DP,求期望)
  5. 路飞学城详细步骤 part1
  6. android悬浮窗口的一些说明
  7. Python入门--8--字符串
  8. LeetCode OJ--Remove Duplicates from Sorted List II *
  9. 用 jQuery实现图片等比例缩放大小
  10. 【Mybatis】 Mybatis在xml文件中处理大于号小于号的方法【问题】