char*和string
来源:互联网 发布:麻将手游源码 编辑:程序博客网 时间:2024/05/21 08:02
#include<cstring>
#include<iostream>
#include<string>
#include<ctime>
#include<cstdlib>
using namespace std;
int main()
{
int i,time1,time2,time3,timec=0,times=0;
time1 = clock();
for (i=0;i <= 5000000; i++) void();
time2 = clock();
time3 = time2 - time1;
printf("5000000次加法所花时间:%dms\n\n\n",time3);
{
char a[]="asdifkhvlanlawoeifdyuhoijqwoienvklsaoiyudpify7382109r789hvoih298375489yhvoiaoiuy39876890rfhoiajsdoify9827r89fhoaijhdsflkjaklsdjfklasjldkfjoiyr890ghoiavhsdowe";
char temp[160];
char b[]="hvoih29";
char c[]="asdifkhvlanlawoeifdyuhoijqwoienvklsaoiyudpify7382109r789hvoih298375489yhvoiaoiuy39876890rfhoiajsdoify9827r89fhoaijhdsflkjaklsdjfklasjldkfjoiyr890ghoiavhsdow2";
char * pos;
int t;
time1 = clock();
for (i=0;i <= 5000000; i++)
{
strcpy(temp,a);
}
time2 = clock();
timec = time2-time1-time3;
printf("char *复制5000000次所花时间:%dms\n",time2-time1-time3);
time1 = clock();
for (i=0;i <= 5000000; i++)
{
pos = strstr(b,temp);
}
time2 = clock();
timec = timec + time2 - time1 - time3;
printf("char *查找子串5000000次所花时间:%dms\n",time2-time1-time3);
time1 = clock();
for (i=0;i <= 5000000; i++)
{
t = strcmp(temp,c);
}
time2 = clock();
timec = timec + time2 - time1 - time3;
printf("char *比较5000000次所花时间:%dms\n",time2-time1-time3);
}
printf("char *三项操作所花时间:%dms\n\n\n",timec);
{
string a = "asdifkhvlanlawoeifdyuhoijqwoienvklsaoiyudpify7382109r789hvoih298375489yhvoiaoiuy39876890rfhoiajsdoify9827r89fhoaijhdsflkjaklsdjfklasjldkfjoiyr890ghoiavhsdowe";
string b = "hvoih29";
string c= "asdifkhvlanlawoeifdyuhoijqwoienvklsaoiyudpify7382109r789hvoih298375489yhvoiaoiuy39876890rfhoiajsdoify9827r89fhoaijhdsflkjaklsdjfklasjldkfjoiyr890ghoiavhsdow2";
int pos;
bool t;
string temp;
time1 = clock();
for (i=0;i <= 5000000; i++)
{
temp = a;
}
time2 = clock();
times = times + time2 - time1 - time3;
printf("string复制5000000次所花时间:%dms\n",time2-time1-time3);
time1 = clock();
for (i=0;i <= 5000000; i++)
{
pos = temp.find(b);
}
time2 = clock();
times = times + time2 - time1 - time3;
printf("string查找子串5000000次所花时间:%dms\n",time2-time1-time3);
time1 = clock();
for (i=0;i <= 5000000; i++)
{
t = temp == c ;
}
time2 = clock();
times = times + time2 - time1 - time3;
printf("string比较5000000次所花时间:%dms\n",time2-time1-time3);
}
printf("string三项操作所花时间:%dms\n",times);
system("pause");
}
今天在与yucenh讨论STL的时候,想到一个问题,曾经听说C++的string是用类实现的,所以,效率很低,感觉到有些怀疑,就做了一个测试。测试结果如下:
测试采用的机子:Intel Core2 Duo CPU T5870 @ 2.00GHz 1.86GB内存
VC++ 6.0
5000000次加法所花时间:62ms
char *复制5000000次所花时间:360ms
char *查找子串5000000次所花时间:16ms
char *比较5000000次所花时间:1126ms
char *三项操作所花时间:1502ms
string复制5000000次所花时间:1938ms
string查找子串5000000次所花时间:1516ms
string比较5000000次所花时间:1672ms
string三项操作所花时间:5126ms
Dev-C++ gcc 3.4.2
5000000次加法所花时间:16ms
char *复制5000000次所花时间:343ms
char *查找子串5000000次所花时间:109ms
char *比较5000000次所花时间:1187ms
char *三项操作所花时间:1639ms
string复制5000000次所花时间:156ms
string查找子串5000000次所花时间:9969ms
string比较5000000次所花时间:2859ms
string三项操作所花时间:12984ms
CodeBlocks gcc 4.4.1
5000000次加法所花时间:31ms
char *复制5000000次所花时间:485ms
char *查找子串5000000次所花时间:78ms
char *比较5000000次所花时间:1173ms
char *三项操作所花时间:1736ms
string复制5000000次所花时间:125ms
string查找子串5000000次所花时间:1329ms
string比较5000000次所花时间:859ms
string三项操作所花时间:2313ms
另外在丫头那测试了下VS2008的结果:
5000000次加法所花时间:15ms
char *复制5000000次所花时间:345ms
char *查找子串5000000次所花时间:156ms
char *比较5000000次所花时间:610ms
char *三项操作所花时间:1111ms
string复制5000000次所花时间:735ms
string查找子串5000000次所花时间:1501ms
string比较5000000次所花时间:1953ms
string三项操作所花时间:4189ms
通过测试可以发现,使用微软系的编译器,string花费的时间比char *多出一倍多,特别是查找字符串,有近10倍的差距。
而gcc系,3.4.2这个Dev-C++默认带的版本,在查找方面更是相差了90倍,4.4.1这个版本也有20倍的差距,对比可以发现,4.4的效率较3.4有了明显的提高。不过,很神奇的是,在字符串复制和比较操作上,string所花费的时间较char *还要少。
如果不是涉及到字符串的查找,那么在比赛中,熟悉string的情况下,尽量使用string,不仅方便,安全,而且,效率上的差距基本上也是不多的,特别是使用gcc的情况下。
- char*,const char*和string
- char*和string
- char数组和string
- String和char
- 还是string和char
- STL---string和char
- Java--String 和 char[]
- string和char*转换
- string和char*
- java char 和string
- string和char*互转
- std:string、char *和char []的问题解答
- char[] string char*区别和联系
- string 和char * char[]之间的转换
- string char *和char[] 之间的转换
- string const char *和char *的转换
- string和c字符串(char*, char[])
- string和char *的转化
- Java编码随记
- 笔记——JavaScript 高级程序设计(1)——ECMAScript基础
- linux 进程地址空间的一步步探究
- android中做图片的平铺
- 博客UI设计竟然让我心动
- char*和string
- 使用 Spring 2.5 TestContext 测试框架
- string char* '\0' "\0"
- 为MFC程序添加ATL简单对象
- 二极管目录
- 安装Apache Installation Wizard Interrupted问题解决方案
- Vb.net2008 Direct编程(一)
- Extjs与struts2整合,ajax请求登录验证
- struts2下利用ajax实现异步刷新