C 风格 string 与 C++ 风格 string 的速度差异


相关资料搜索于 community.csdn.net


在《C++ Primer》的 82 页有这样一个例子:


/*
 * C 风格字符串实现代码
 
*/


#include 
<iostream>
#include 
<cstring>

int main() {
int errors=0;
const char *pc="a verry long literal string";

forint 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 string: "<< errors <<" errors occured. ";
return 0;
}
 


/*
 * C++ 类 string 的实现代码
 
*/


#include 
<iostream>
#include 
<string>

int main() {
int errors = 0;
sring str( 
"a verry long literal string" );

forint ix = 0; ix < 1000000++ix ) {
int len = str.size();
string str2 = str;

if ( str != str2 ) {
++errors;
}

}


cout 
<< "string class: "<< errors << " errors occured. ";
return 0;
}

作者在书中提到:“平均来说,string 类型实现的执行速度是 C 风格字符串的两倍,在一台 UNIX 机器上,前一个程序(C 风格的)用时 1.98 秒,后一个(C++ 风格的)用时 0.96 秒。

产生此种差异的原因在于 string 类型是 “写时复制” 的,如果 str2 没有改变,str2 就没在真正在内存中构造,而与 str 实例共用一个内存单元。只要在构造后加一句 str2[0]='A',整个程序的运行时间就与 C 风格字符串的实现相当了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值