Algorithm 版 (精华区)
发信人: Lerry (戒网·学习), 信区: Algorithm
标 题: [合集]CString比较操作的改进
发信站: 哈工大紫丁香 (2001年12月23日16:37:59 星期天), 站内信件
────────────────────────────────────────
sino (一层秋雨一层凉) 于 2001年12月17日12:07:23 星期一 说道:
VC++中的CString用起来十分直观、方便,但是它的效率并不高。
尤其是两个CString的比较,巨慢无比。
比如有:
CString s[10000],t[10000];
int i,j,k;
for (i=0;i<10000;i++) {
s[i].Format("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
t[i].Format("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}
作如下操作:
for (i=0;i<9999;i++) for (j=i+1;j<10000;j++) if (s[i]<t[j]) k=0; else k=1;
在pIII933上用时平均为133秒。
改为:
unsigned short * m,* n;
for (i=0;i<9999;i++) for (j=i+1;j<10000;j++) {
m=(unsigned short *)(LPCTSTR)s[i];
n=(unsigned short *)(LPCTSTR)t[j];
k=0;
while (k<20) {
if (*m!=*n) break; else {m++;n++;}
k++;
}
}
平均用时减为39秒。
若改为:
unsigned int * m,* n;
for (i=0;i<9999;i++) for (j=i+1;j<10000;j++) {
m=(unsigned int *)(LPCTSTR)s[i];
n=(unsigned int *)(LPCTSTR)t[j];
k=0;
while (k<10) {
if (*m!=*n) break; else {m++;n++;}
k++;
}
}
用时降至29秒。
因此,如长度差异不大,而比较次数很多时,可以参考使用上面的变形的比较方法,提
高效率。
────────────────────────────────────────
northernstar (顽皮的精灵努力学习中) 于 2001年12月17日16:14:27 星期一 说道:
若直接用 s[i].Compare(t[i])
又如何呢?
────────────────────────────────────────
sino (一层秋雨一层凉) 于 2001年12月17日16:38:03 星期一 说道:
S[i]!=t[i]时就是这样做的,可以用F11跟踪看到。不过的确是能够
少执行一些东西。
────────────────────────────────────────
sino (一层秋雨一层凉) 于 2001年12月17日16:40:56 星期一 说道:
不好意思,我是指做s[i]!=t[i]时使用了s[i].compare(t[i])这一步
────────────────────────────────────────
Darcy (麦克思韦妖) 于 2001年12月18日08:32:28 星期二 说道:
haha,中午找sino时看到sino机器任务条有一个任务cstringtest
就知道sino在做这种东东
────────────────────────────────────────
sino (一层秋雨一层凉) 于 2001年12月18日09:20:30 星期二 说道:
大飞,你太了解我了!
────────────────────────────────────────
hrn (做个好男人) 于 2001年12月22日21:53:15 星期六 说道:
re
────────────────────────────────────────
deem (摩亚迪·沙丘男爵) 于 2001年12月22日22:10:41 星期六 说道:
对于系统提供的东西我的观点一向是搞着玩玩没问题,
做做界面没有问题,做算法如果用CString我就有一点
搞不懂事怎么想得了!
────────────────────────────────────────
sino (一层秋雨一层凉) 于 2001年12月23日13:27:21 星期天 说道:
我是看有的师哥、师姐老是抱怨程序运行速度慢,
才弄得这个,不是用于算法的。:)
────────────────────────────────────────
northernstar (顽皮的精灵努力学习中) 于 2001年12月23日14:25:39 星期天 说道:
//pad
好孩子!
────────────────────────────────────────
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.398毫秒