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毫秒