• C++的string连接(a = a + b 与 a += b)


    
    大一学习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的区别了。

  • 相关阅读:
    数据结结构学习 赫夫曼树
    C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
    Linux/Unix time时间戳的处理转换函数
    gcc中include文件的搜索路径
    数据结结构学习 2叉树
    C++ 虚函数表解析
    数据结结构学习 线性表
    C#实现MD5加密
    学习的艺术
    C# 3.0实现类本身的方法扩展
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318366.html
Copyright © 2020-2023  润新知