免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5186 | 回复: 17
打印 上一主题 下一主题

string 类型实现的执行速度是 C 风格字符串的两倍 平均来说 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-11 20:52 |只看该作者 |倒序浏览
// ***** C-style character string implementation *****
#include <iostream>;
#include <cstring>;
int main()
{
   int errors = 0;
   const char *pc = "a very long literal string";
   for ( int ix = 0; ix < 1000000; ++ix )
   {
       int len = strlen( pc );
       char *pc2 = new char[ len + 1 ];
       strcpy( pc2, pc );
       if ( strcmp( pc2, pc ))
          ++errors;
       delete [] pc2;
   }
   cout << "C-style character strings: "
        << errors << " errors occurred.\n";
}

// ***** string implementation *****
#include <iostream>;
#include <string>;
int main() {
    int errors = 0;
    string str( "a very long literal string" );
    for ( int ix = 0; ix < 1000000; ++ix )
    {
       int len = str.size();
       string str2 = str;
       if ( str != str2 )
            ++errors;
    }
    cout << "string class: "
        << errors << " errors occurred.\n";
}

各位请教一下,为什么string风格的会快点呢??string类不也是基于c实现的吗??谢谢!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-05-11 20:58 |只看该作者

string 类型实现的执行速度是 C 风格字符串的两倍 平均来说

有那个strlen的缘故
string是记录长度的,而char []需要找到'\0'来确定长度

论坛徽章:
0
3 [报告]
发表于 2005-05-11 21:35 |只看该作者

string 类型实现的执行速度是 C 风格字符串的两倍 平均来说

[quote]原帖由 "yuxh"]

论坛徽章:
0
4 [报告]
发表于 2005-05-12 11:25 |只看该作者

string 类型实现的执行速度是 C 风格字符串的两倍 平均来说

把 len = strlen(pc)放在外面,结果就不一样了
  1. // ***** C-style character string implementation *****
  2. #include <iostream>;
  3. #include <cstring>;
  4. int main()
  5. {
  6.   int errors = 0;
  7.   const char *pc = "a very long literal string";
  8.   int len = strlen( pc ); //这句放在外面
  9.   for ( int ix = 0; ix < 1000000; ++ix )
  10.   {
  11.       char *pc2 = new char[ len + 1 ];
  12.       strcpy( pc2, pc );
  13.       if ( strcmp( pc2, pc ))
  14.          ++errors;
  15.       delete [] pc2;
  16.   }
  17.   cout << "C-style character strings: "
  18.        << errors << " errors occurred.\n";
  19. }

  20. // ***** string implementation *****
  21. #include <iostream>;
  22. #include <string>;
  23. int main() {
  24.    int errors = 0;
  25.    string str( "a very long literal string" );
  26.    for ( int ix = 0; ix < 1000000; ++ix )
  27.    {
  28.       int len = str.size();
  29.       string str2 = str;
  30.       if ( str != str2 )
  31.            ++errors;
  32.    }
  33.    cout << "string class: "
  34.        << errors << " errors occurred.\n";
  35. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2005-05-12 11:50 |只看该作者

string 类型实现的执行速度是 C 风格字符串的两倍 平均来说

[quote]原帖由 "Moonwellatg4"]把 len = strlen(pc)放在外面,结果就不一样了 [/quote 发表:

恩。是阿。本来它被循环了那么多次,怪不的效率差。
其实,个人遇见:应该是越抽象上去的效率应该不会越高阿,c++的效率应该不会比c高,java,c#都是如此。

论坛徽章:
0
6 [报告]
发表于 2005-05-12 11:56 |只看该作者

string 类型实现的执行速度是 C 风格字符串的两倍 平均来说

性能的比较,只看过一次书上讲的,C/Perl/Java/C++STL/awk的,什么操作也忘了。The Practice of Programming,字符串处理好象是C和Perl最快

论坛徽章:
0
7 [报告]
发表于 2005-05-12 12:02 |只看该作者

string 类型实现的执行速度是 C 风格字符串的两倍 平均来说

[quote]原帖由 "albcamus"]性能的比较,只看过一次书上讲的,C/Perl/Java/C++STL/awk的,什么操作也忘了。The Practice of Programming,字符串处理好象是C和Perl最快[/quote 发表:

恩,努力去看看。

论坛徽章:
0
8 [报告]
发表于 2005-05-12 13:05 |只看该作者

string 类型实现的执行速度是 C 风格字符串的两倍 平均来说

真是狗屁,不知道你们都在学些什么东西!


1.圣骑士说:把 len = strlen(pc)放在外面,结果就不一样了;
当然不一样了,原来执行了好多遍strlen(pc),现在只执行了一遍,所以你感觉不到他们的差异!而不是他们没差异。


2.在大部分时候C和C++的代码效率是差不多的,C++和C比较时,性能差异的地方是在用到了虚拟机制的时候,他会有多次引用,所以性能受到了影响。
开始的时候C++代码都是由C编译器编译的,所以他们的效率大部分时候是差不多的。

至于楼主说的封装后的代码效率肯定低,这句话就是完全错误的!好好多读读书,别在这里献丑!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2005-05-12 13:17 |只看该作者

string 类型实现的执行速度是 C 风格字符串的两倍 平均来说

to 楼上:
1,你很不文明;
2,你不懂汉语,不能正确地感知汉语语境,从而误解了别人的意思;
3,你很无知,因为你看不到别人的长处……只看到短处……,所以你也很可怜,因为你的世界是灰色的……,我很同情你……也很怜悯你……愿真主保佑你……

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2005-05-12 13:33 |只看该作者

string 类型实现的执行速度是 C 风格字符串的两倍 平均来说

原帖由 "flw" 发表:
to 楼上:
1,你很不文明;
2,你不懂汉语,不能正确地感知汉语语境,从而误解了别人的意思;
3,你很无知,因为你看不到别人的长处……只看到短处……,所以你也很可怜,因为你的世界是灰色的……,我很同情你…..........


      
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP