C++中char *和string效率的比较

3 篇文章 0 订阅

原文:http://apps.hi.baidu.com/share/detail/9228963


今天在与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的情况下。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ROS是机器人操作系统,用于开发机器人软件的一种框架。在ROS,参数传递是非常常见的一个问题,因为在机器人系统需要不同的节点和模块之间相互协作。而为了让这些节点能够相互协作,就需要在这些节点之间传递参数信息。而在ROS传递参数信息的方式就是使用命令行参数。 在ROS,使用命令行参数的方式和在C/C++使用命令行参数的方式是一样的。在C/C++,使用命令行参数可以通过argv和argc来实现。其argv是一个指向字符串数组的指针,它存储了从命令行传递过来的参数信息,而argc是参数的个数。而在ROS,使用命令行参数也是通过argv和argc来实现的。 在ROS,通过定义char** string类型的argv参数来获取从命令行传递过来的参数信息。其char**是指向指针的指针,它可以存储字符串类型的信息。而在ROS,命令行传递过来的参数信息都是字符串类型的信息。因此在ROS,使用char** string类型的argv参数可以获取从命令行传递过来的所有的参数信息。 总而言之,ROS提供了很多非常方便的工具和API来处理不同节点之间的参数传递。而在ROS,通过命令行参数argv和argc来实现参数传递也是非常方便的一种方式。在ROS使用char** string类型的argv参数可以方便地获取从命令行传递过来的参数信息,提高了程序的灵活性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值