关于debug和release 以及new 和delete

题目:给出一组字符串

 输入:"ate","eat","Eat","new","ENW",“wha”

输出::"ate","eat","Eat","

        "new","ENW"

第一种方法,首先将所有字符串都转换为小写(或者大写也OK,重点在于统一字符串),

                然后将单个字符串中的字母按照大小顺序进行排列;

               最后比较字符串大小,如果有相同的字符串就输出。

              这种方法复杂度其实也挺大的,因为有三层循环。

第二种方法,第一步同第一种方法

                然后利用字符串中自带find函数进行查找,

             用一个vector存储相同的字符串的位置

     好吧,这种方法其实复杂度太大了,因为find 函数本来就是一重循环,共有四层循环

 

第三种方法,好吧,我承认是昨天看了hash表的原因,我想采用hash表来实现

                首先计算每个字符串的hash值,方法如下,当然也可以改变方式

                string s;  int value;

              for(string::iterator it=s.begin(),it!=s.end();it++)

               {

                             if(isupper(*it))

                                    value+=(*it-'A');

                              else

                                 value+=(*it-'a');

                    }

将字符串插入到hash表中的方法是,由于每一行是我们需要的“相同”的字符串,所以首先是判断hash值是否相同,如果相同了之后再比较这两个字符串是否“相同”

如果字符串也“相同”,采用头插法插入字符串;如果不相同的话则采用线性探测法去寻找储存该字符串的位置,(现在看来貌似这点我有点没有做好,改一改)

最后也实现了相同的功能。这种方法主要是想通过hash值的设置来减少字符串的比较次数,从而降低复杂度。

 

 

尝试了一下,采用10000组数据,发现第二种方法永远是最劣质的,好吧,这种方法我也觉得,看几个的时候还是OK的,数据一多的时候,立马暴露缺陷了。

但是奇怪的事情出现了,第三种方式在debug模式下足足比第一种方式快了10倍,但是一到release模式下竟然比第一种方式还慢了一半,实在是百思不得其解啊,看来还是要好好看看debug和release的区别了!!!

debug和release模式下的区别

 

posted @ 2016-04-28 22:08  学会走路  阅读(615)  评论(0编辑  收藏  举报