为什么string比char快?

dtgdf2006 2010-07-25 04:30:00
我记得《c++primer》说到string比char字符快一些,一开始我还不信,自己测试了一下,结果很让我吃惊,string比char字符快了38倍!《c++primer题解》的解释居然是char比string快,很明显这是臆断,哪位高手能解释一下为什么string比char快。
...全文
2297 120 打赏 收藏 转发到动态 举报
写回复
用AI写文章
120 条回复
切换为时间正序
请发表友善的回复…
发表回复
syflyhua 2011-11-30
  • 打赏
  • 举报
回复
被这么多人鄙视,哎~~~~
  • 打赏
  • 举报
回复
一台没装VC的电脑飞过。。。。
benbshmily 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 116 楼 r11222 的回复:]

jackyjkchen是技术牛人,我一直是jackyjkchen的回帖都会细细拜读,但 不可否认, jackyjkchen 回答问题的态度比其他大牛稍差, 差的意思是, 回答快狠准, 但通俗的说, 比较拽,呵呵

但拽也有拽的实力.jackyjkchen对技术的执著是每个人都知道的。

另外 ,三路快排不一定能提升性能 ,如果你要排序的数组都是不一样的数, 反而比普通快排要慢

我觉……
[/Quote]
评价得比较客观。jackyjkchen那句话确实有那么一点不妥。并没有多少人都能写出比标准快几十倍的算法。毕竟标准算法是大牛们长年积累下来的。
skyaspnet 2010-08-02
  • 打赏
  • 举报
回复
学习。。。
r11222 2010-08-01
  • 打赏
  • 举报
回复
jackyjkchen是技术牛人,我一直是jackyjkchen的回帖都会细细拜读,但 不可否认, jackyjkchen 回答问题的态度比其他大牛稍差, 差的意思是, 回答快狠准, 但通俗的说, 比较拽,呵呵

但拽也有拽的实力.jackyjkchen对技术的执著是每个人都知道的。

另外 ,三路快排不一定能提升性能 ,如果你要排序的数组都是不一样的数, 反而比普通快排要慢

我觉得 ,标准库是一些技术牛人多年研究出来, 他的做法肯定有他们的道理,麻木地用自己的算法代替标准

库,得到的结果不一定都是好的,但 ,只要你知道自己的需要,知道如何实现,自己去写一个算法代替标准库

也是好的, 就拿qsort举例 , qsort 为了通用性 , 增加了一个 compare函数,但 如果你知道,你的项目只需要

排序整数,那你还有必要用标准qsort 吗? 函数的调用必然会增加开销, 好了,这都是我的想法,不对的请

更正。
野鬼灬 2010-07-31
  • 打赏
  • 举报
回复
什么????string比char快?
billanking 2010-07-31
  • 打赏
  • 举报
回复
楼主,clock转圈了吧。
barrons 2010-07-31
  • 打赏
  • 举报
回复
看牛人就技术问题发表意见就是爽
onpduo 2010-07-31
  • 打赏
  • 举报
回复
不一般那,这么多回帖,LZ很棒~
sevencat 2010-07-31
  • 打赏
  • 举报
回复
就拿std::string来说,获得字符串的长度比char *要快,因为一般std::string的某个成员变量保存了这一长度。但char *就需要strlen去获取。

但strcat有时候会比std::string快,因为std::string在append的时候有可能会重新分配内存,而strcat则不需要。
strdup,strcpy,strcmp有可能会比std::string慢,同样是因为std::string预知长度的原因。
其实这些都意义不大。只有当这个影响到你的程序的时候。
在vc2005和以上,std::string在16个字符以内的话不另外分配内存,在小字符串的时候会明显加快速度。

sevencat 2010-07-31
  • 打赏
  • 举报
回复
程序慢95%的情况是整个结构不好,而不是单个类的问题。
一般只有5%的地方需要对类和函数进行特别优化。
sevencat 2010-07-31
  • 打赏
  • 举报
回复
有一种人:
这个好,那个不好,这个快,那个慢。

有种人:
这个慢在这个地方,但这个地方比较方便,有的虽然这种操作比较快,但那个操作会有问题。

另一种人:
你要实现什么功能,对性能有什么要求,我帮你找一个,没有的话我来写一个。
dtgdf2006 2010-07-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jackyjkchen 的回复:]
看来楼主适合string,因为string就是给那些自己写算法会比标准库慢几十倍的人用的。
[/Quote]
我承认我的算法是比标准库的慢,但是我不认同string 是给那些自己写算法会比标准库慢几十倍的人用的,我认为string 是给所有使用C++的人用的,如果代码的执行效率比代码健壮性,可维护性和代码的开发效率都重要的话我们为什么还要用C++,那还不如用C和汇编,我想架构师是不会允许char指针满天飞的。再说Boost库的函数的参数基本上都是basic_string<>,MFC只用CString,微软的Greta也依赖basic_string<>,你能说这些类库的作者写算法比标准库慢几十倍吗?
linsen_519 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 106 楼 jackyjkchen 的回复:]

扯了扯了,我还给组员做绩效,没时间和你聊家常了。

只是希望你记住我说的话(这么激烈的对话,记不住是白痴)

至少你火爆的脾气以及爱用红色字体像我,哈哈,回见。
[/Quote]
我只记牛人说的话~
哎~ 午睡泡汤了
jackyjkchen 2010-07-30
  • 打赏
  • 举报
回复
扯了扯了,我还给组员做绩效,没时间和你聊家常了。

只是希望你记住我说的话(这么激烈的对话,记不住是白痴)

至少你火爆的脾气以及爱用红色字体像我,哈哈,回见。
linsen_519 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 104 楼 jackyjkchen 的回复:]

如果你是大一或大二,那么现在努力来得及,当时的我不比你强,如果你是大四或者工作了……对不你,你绝对的悲剧了,人在过了二十岁之后往往会失去潜力,归根结底,就是吃不得苦,认不了真。

愿意听也罢,不听也罢,你是死是活,是富是穷,与我没有关系;

我似乎从你的口气中听出来你的父母辈也在为你的懒惰而担心(否则那个“娘们”是的是谁),唉,这与我就无关了
[/Quote]
看~ 又开始猜想别人的信息了~你跟哥哥玩“哥德巴赫猜想呢?!”
先猜想一翻~ 然后自己论证自己的猜想~ 你不会是这样学C++的吧? 不对~ 是C
别为古人担忧好么?
我还是给你那些话:
你真不用介绍你的信息~~ 没情趣听~
更不用说什么勤奋不勤奋的大道理~ ~ 因为那都是娘们常说的话~
你更不应该猜想别人是什么样的人~去猜猜明天的彩票号是多少(那更有意义)
你说的以上人物确实是大牛~ 尤其是飞雪我服~

可你不能和他们相提并论~这让我觉得恶心~ 因为他们都很谦虚和低调~
他们只会说这门技术我掌握到什么程度~ 而不会轻易的去贬低一门技术~
jackyjkchen 2010-07-30
  • 打赏
  • 举报
回复
如果你是大一或大二,那么现在努力来得及,当时的我不比你强,如果你是大四或者工作了……对不你,你绝对的悲剧了,人在过了二十岁之后往往会失去潜力,归根结底,就是吃不得苦,认不了真。

愿意听也罢,不听也罢,你是死是活,是富是穷,与我没有关系;

我似乎从你的口气中听出来你的父母辈也在为你的懒惰而担心(否则那个“娘们”是的是谁),唉,这与我就无关了
linsen_519 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 102 楼 jackyjkchen 的回复:]

引用 101 楼 linsen_519 的回复:
引用 99 楼 jackyjkchen 的回复:

想本区的Laoden、mstlq、飞雪等大牛,在他们身上我没看出来有什么天赋,恰恰看到的是一种勤奋。

尤其是laoden,高中物理教师,根本不是业内人士,但对于技术的理解和掌握超过了99%的“程序员”

笨鸟可以先飞,懒人无可救药。

作为应届本科生的我,只是比别人勤奋那么一……
[/Quote]
别人勤奋不勤奋~ 真的和你没关系~
我就说 我不勤奋~ 我一事无成那又怎样呢? 少说点令别人烦感的话对你有好处~还是那些话:
你真不用介绍你的信息~~ 没情趣听~
更不用说什么勤奋不勤奋的大道理~ ~ 因为那都是娘们常说的话~
你更不应该猜想别人是什么样的人~去猜猜明天的彩票号是多少(那更有意义)
你说的以上人物确实是大牛~ 尤其是飞雪我服~

可你不能和他们相提并论~这让我觉得恶心~ 因为他们都很谦虚和低调~
他们只会说这门技术我掌握到什么程度~ 而不会轻易的去贬低一门技术~
jackyjkchen 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 101 楼 linsen_519 的回复:]
引用 99 楼 jackyjkchen 的回复:

想本区的Laoden、mstlq、飞雪等大牛,在他们身上我没看出来有什么天赋,恰恰看到的是一种勤奋。

尤其是laoden,高中物理教师,根本不是业内人士,但对于技术的理解和掌握超过了99%的“程序员”

笨鸟可以先飞,懒人无可救药。

作为应届本科生的我,只是比别人勤奋那么一点点。


你真不用介绍你的信息~~ 没情趣听~……
[/Quote]
害怕别人提勤奋?哈哈,这说明了什么?不解释
linsen_519 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 99 楼 jackyjkchen 的回复:]

想本区的Laoden、mstlq、飞雪等大牛,在他们身上我没看出来有什么天赋,恰恰看到的是一种勤奋。

尤其是laoden,高中物理教师,根本不是业内人士,但对于技术的理解和掌握超过了99%的“程序员”

笨鸟可以先飞,懒人无可救药。

作为应届本科生的我,只是比别人勤奋那么一点点。

[/Quote]
你真不用介绍你的信息~~ 没情趣听~
更不用说什么勤奋不勤奋的大道理~ ~ 因为那都是娘们常说的话~
你更不应该猜想别人是什么样的人~去猜猜明天的彩票号是多少(那更有意义)
你说的以上人物确实是大牛~ 尤其是飞雪我服~

可你不能和他们相提并论~这让我觉得恶心~ 因为他们都很谦虚和低调~
他们只会说这门技术我掌握到什么程度~ 而不会轻易的去贬低一门技术~
加载更多回复(100)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧