社区
C++ 语言
帖子详情
关于char *和 string的效率问题
zpk1234
2007-11-03 03:22:10
两个效率谁高啊,在我的机子上测试是前者高,而C++primer 上说的是后者高,有点不一样
...全文
414
14
打赏
收藏
关于char *和 string的效率问题
两个效率谁高啊,在我的机子上测试是前者高,而C++primer 上说的是后者高,有点不一样
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
loops
2007-11-05
打赏
举报
回复
debug和release差别很大,比如调用函数的时候,debug下面要将函数所分配的栈都置为0xcccccccch,string调用的函数要比上面的new和delete多得多,因此首先在这方面开销就大,其他微软为了发现错误,还在debug下增加了很多代码,比如检查栈等等。尽管debug下new和delete也有这方面的额外开销,但是string更加复杂,做得更多,导致这些额外的开销掩盖了实质。
zpk1234
2007-11-05
打赏
举报
回复
Release和Debug有什么区别啊,在Release下后者是前者的1/3,而在Debug下后者比前者稍多,这是为什么?
jxlczjp77
2007-11-05
打赏
举报
回复
使用char *,就不得不检查有效性.
而用string的话假设它是安全的,不再需要额外检测.
这就与引用和指针一样,引用默认总是需要指向一个对象,所以使用时不需要再额外检查(当然了,这并不绝对,比如引用到一个失效的指针)。而使用指针则几乎总是需要测试有效性.
yuyunliuhen
2007-11-04
打赏
举报
回复
测试后者快点
g961681
2007-11-04
打赏
举报
回复
up
loops
2007-11-04
打赏
举报
回复
换在Release下试试。Debug下面函数调用的开销太大,误差大。
我在vc6 release下,后者时间只是前者的三分之一。
毕竟COW机制要比反复new和delete高效多了。
cctdbnj
2007-11-03
打赏
举报
回复
楼主用的什么编译器,我用dev-c++时后者耗时少些,分别是:328,172;而用vc分别是843,938
tangshuiling
2007-11-03
打赏
举报
回复
严格来说:char*比string还是要快点,只是微不足道。起码string类还要调用构造,析构甚至拷贝构造函数等!
就安全性来说,用string比用char*要来的更加稳当。牺牲了微弱的时间保证了安全性,评价嘛一个字———值!
Lstyk
2007-11-03
打赏
举报
回复
标准库中的string不知道具体是如何实现的,感觉应该是链表一类的,我觉得对于赋值、访问一类的操作,数组会快一些,而对于那些要在串后面增添成员的操作,考虑到数组要确定有足够的空间(否则要重新定义数组,分配空间,然后复制到新数组),string应该更方便、快一些。
或许是这样吧。
zpk1234
2007-11-03
打赏
举报
回复
请问nevergone 该如何测试
CedarDiao
2007-11-03
打赏
举报
回复
你在Win32测速是不会很准的,建议LZ将以上测速语句中的执行体反复执行10000次,放大结果看看
shizhiqing2003
2007-11-03
打赏
举报
回复
呵呵,当然要差点了
nevergone
2007-11-03
打赏
举报
回复
你不能这样比较呀
zpk1234
2007-11-03
打赏
举报
回复
贴上代码:
#include <iostream>
#include <string>
#include <cstring>
#include <cstddef>
#include <ctime>
using namespace std ;
const int N = 1000000 ;
int main()
{
const char *pc = "a very long literal string" ;
const size_t len = strlen( pc) + 1 ;
double start,finish; // 开始时间,结束时间
start=(double)clock();
for( size_t i = 0 ; i != N; ++i )
{
char *pc2 = new char[len+1] ;
strcpy(pc2,pc) ;
if( strcmp(pc2,pc) ) ;
delete [] pc2 ;
}
finish=(double)clock();
cout<<"所用的时间为(毫秒):"<<finish - start<<endl ;
string str("a very long literal string") ;
start=(double)clock();
for( i = 0 ; i != N; ++i )
{
string str2 = str ;
if( str2 != str ) ;
}
finish=(double)clock();
cout<<"所用的时间为(毫秒):"<<finish - start<<endl ;
return 0 ;
}
运行时间为:
前者: 766
后者: 890
好象差的挺多的啊
C
String
std::
string
char
* 的转换
博客聚焦于C
String
、std::
string
和
char
*之间的转换,在信息技术领域,不同数据类型的转换是常见操作,掌握这些转换方法有助于提升编程
效率
和解决实际
问题
。
C++中
string
、
char
*、
char
、int的相互转换
本文介绍了C++中字符串(
string
)与
char
*之间的转换方法,包括data()、c_str()和copy()函数的使用。同时讲解了如何将字符串和
char
*转换为整型(int)以及
char
转int的技巧。在处理字符串到字符和数字的转换时,应注意防止额外的'
map的key 为指针
本文探讨了在STL map中使用
char
*作为key的挑战与解决方案。原本使用
string
作为key,为了提高
效率
改用
char
*,但直接替换导致查找失败。通过重载比较操作符,解决指针比较
问题
,实现正确查找。
PAT真题(C/C++)——1047:Shopping in Mars
博主在解决PAT题目1047时遇到了超时
问题
,起初使用set和
string
导致运行慢。通过将set替换为vector、
string
改为
char
数组并尝试不同排序方式,仍无法通过。最终,博主使用数组下标来表示学生名字,从而成功通过。分析认为,字符串排序的开销大于整数,cin比scanf低效,
string
操作比
char
*低效,set不如vector+sort高效。总结出的
效率
提升点包括:scanf优于cin,
char
*优于
string
,vector+sort优于set(有时unordered_map更优),常数排序优于字符串排序。
CEGUI::
String
类分析
本文探讨了在使用CEGUI时遇到的中文显示
问题
,并提供了将const
char
*类型的中文文本转换为CEGUI::
String
所需的方法。包括使用WindowSDK进行多字节编码到utf8编码的转换,以及正确配置字体文件以确保中文字符能够正确显示。同时,提出了修改CEGUI::
String
源码以提高
效率
的建议。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章