社区
C++ 语言
帖子详情
string的效率问题
stuff990
2007-07-05 09:33:18
不知道string的效率如何
现在有一个
char p[1024]的字符数组
不断将字符填入p
想用string的一些方法,于是
string aString=string(p);
string b=p.substr(1,10)
不知道这项是不是比自己在p上移动指针慢很多
...全文
423
10
打赏
收藏
string的效率问题
不知道string的效率如何 现在有一个 char p[1024]的字符数组 不断将字符填入p 想用string的一些方法,于是 string aString=string(p); string b=p.substr(1,10) 不知道这项是不是比自己在p上移动指针慢很多
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
taodm
2007-07-05
打赏
举报
回复
mLee79() 说说哪些地方有过多的临时对象的创建吧。对比相同情况下,字符数组是如何处理这些情况的呢?
loops
2007-07-05
打赏
举报
回复
STL设计的时候是包含thread safe的目的吗?
我印象中STL是以高效为第一目的的。
mLee79
2007-07-05
打赏
举报
回复
不是在于动态分配内存, 基于以前讨论标准的实现通常都用引用计数+COW实现, 但是在多线程/多CPU环境中是不安全的, 到现在已经基本被废止, 现在的实现通常都基于值语义, 导致过多的临时对象的创建...
loops
2007-07-05
打赏
举报
回复
string高不高效,关键看怎么使用它了。
string低效主要还是在于动态分配内存,以及若干个成员函数的返回的是临时对象,而不是引用。而且自vc2005开始,相比vc6.0而言,我发现string的实现又进行了改变,对于处理少于8个字节的字符串,不用再动态分配内存。甚至还可以重写底层的allocator类。
总之,如果性能敏感的应用,如果应用得好,应该不比数组差。
mLee79
2007-07-05
打赏
举报
回复
string 高效倒是第一次听说, 据我所知道的 string && stream 是两个相当低效的玩意, 当然对一般的性能不敏感的应用倒是足够了 ...
loops
2007-07-05
打赏
举报
回复
string::substr需要重新构造一个临时的string对象,这会引起效率损失。
不明白为啥要string aString=string(p);如果p是个零结尾的字符串数组,直接string aString=p;就可以了,何必再去构造一个临时对象string(p)再赋给aString。
taodm
2007-07-05
打赏
举报
回复
总之,要实现string的那么多功能,string是最快的。
如果你只需要很少很少的功能,那么数组快。不过,“只需要很少很少的功能”也是很少很少很少发生的。
taodm
2007-07-05
打赏
举报
回复
自己实际测一下就知道了。
string的主要优势是,如果你要填入第1025个字符的时候你该怎么办。
loops
2007-07-05
打赏
举报
回复
现在的std::string的确没有包含过多的技巧,但是简单的实现并不等于不好。
引用计数+Copy On Write机制,对于内容大致都不同的string,只会白白的增加维护那个机制的成本。
hashcode 排序的字符串比较,对于大量字符串间的比较有好处,对于两个简单的字符串的一次比较,比如“abc" "cad",白白增加计算hash值的时间和浪费存储hash值的空间。
没有见到过一种string的方案,可称得上完美和普适任何情况。一切取决于解决问题的需要。
简而言之,exString和string都有存在的必要。
mLee79
2007-07-05
打赏
举报
回复
如果基于 引用计数+COW 实现, 大多数的字符串赋值, substring , const string pooling 等等情况下都无需产生内存的分配与释放....
如果是使用字符串数组, 我还会为非使用字典顺序的字符串大小比较提供使用 hashcode 排序的字符串比较....
字符串的搜索至少应该提供可以选择的更加高效的实现, 而不是仅仅提供一个平凡的实现 ....
stl 确实不是以 thread safe 为目的, 但是如果这门基于实用主义的的语言能够稍微牺牲下所谓的优雅性, 以原子的方式处理引用计数(虽然这不是语言本身的功能), 很容易的就可以弄出一个thread safe的基于引用计数的更加高效的 exString 出来 ...
从本质上说, 现在通行的 std::string 的实现基本是一个非常平凡的实现, 并未包含过多的技巧 ....
java中
String
、
String
Buffer、
String
Builder
效率
比较
比较结果
String
Builder >
String
Buffer >
String
原因分析
String
字符串对象不可变,每次更改都会新分配一个地址存放。
String
Builder和
String
Buffer对象为可变字符,每次更给都是在原基础上更改,速度较快。小量操作不明显,大量执行时速度差距甚大。 public class SpeedTest { public static void main(
String
[] args) { long startTime
String
中 split 方法的
效率
问题
问:
String
中 split 方法使用时有什么
效率
问题
吗? 答:
String
的 split 分割字符串函数我们一般会如下方式使用。
String
[] arr = "a,b,c".split(","); 上面代码非常简洁, 也没什么
问题
。不过一旦我们进行如下方式使用就可能会有
问题
了。 for (
String
line : lines) { line.split("[,.!+@#$%^...
java
string
效率
高_java中
String
和
String
Buffer哪个
效率
高
大多数的网站以及多数的java书上都会说使用
String
Buffer类进行字符串”连接”操作是比
String
类进行连接操作的
效率
高的,那么真的是这样吗?在这里我们实际自己测试一下,看看他们两个到底谁的
效率
高,然后从反编译的代码解释原因.在我的这篇博客:《Java中 “abc” + ‘/’和”abc” + “/”的区别》中提到了
String
类的’+’操作是依赖于
String
Builder类的,而JD...
为什么
String
Builder的
效率
比
String
的
效率
要高
详细的解释
String
Builder比
String
高
效率
的原因,同时从设计层面刨析为什么
String
要设计成不可变的
String
+,
String
Builder,
String
.format运行
效率
比较
实现
String
字符串相加的方法有很多,常见的有: 直接相加
String
Builder.append
String
.format 这三者的运行
效率
是有差异的.
String
是final类型的,每次相加都会new一个。
String
a = b + c(本质就是调用了new
String
Builder().append(a).append(b).to
String
) 不管bc是什么类型的,append方法会调用类型Abstract
String
Builder的append()方法进行转换)当执行一次加法
C++ 语言
64,659
社区成员
250,515
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章