免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 894 | 回复: 0
打印 上一主题 下一主题

请教renstone921一个程序速度问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-09-06 12:01 |只看该作者 |倒序浏览
[题目]:
/////////////////////////////////////////////////////////////////////////////////////
     比如我有一个这样的一维数组集合,数量在几万到几十万.如:

                                             752136125,

                                             021548796,

                                             452669896,

                                              ........

                                             254685855,
    我想对这个一维数组集合做如下处理:
                             1,第一步把全部数组的第三个元素都用0代替.
                             2,第二步如果数组的第一个元素为7则分别用
                      1和2代替.
                             3,第三步如果数组的第二个元素为5则分别用
                      3和4代替.
                             4,第四步如果数组的第四个元素为1则分别用
                      5和6代替.
                               以此类推.......
/////////////////////////////////////////////////////////////////////////////////////




[问题]:
/////////////////////////////////////////////////////////////////////////////////////
      1,因为我想处理的这个一维数组集合数量很大,在几万到几十万.而且每     个数组最后要繁殖到十六个,也就是最后这个一维数组集合要扩大十六倍,所以首先应该考虑的是程序运行的速度问题,
      
      2,在最后的处理结果中一定会有大量重复的(完全一样的)数组,所以在程序
       中应该考虑删除相同的数组,也就是在最后输出结果中只有一个这样的
       数组.
/////////////////////////////////////////////////////////////////////////////////////




[我对问题的看法和思路]:
/////////////////////////////////////////////////////////////////////////////////////
方法一:
#include <stdio.h>;
#include <string.h>;
#include     N     9
for (int index = 0; index < m_List1.GetCount(); index++)
{
     m_List1.GetLBText(index, str);
     ptr = str + 2;
     *ptr = '0';  
       char   ptr=new  char[8];//动态分配内存空间
     if(*(ptr+1)=='5')
     {
           ptr=str+1;
           *ptr==' 3'||*ptr=='4' ;
       }    //  我在这里试着把数组的第二个元素5,用3和4来代替,程序运行没有
           警告和错误,但是,在最后的处理结果中没有把5用3和4代替了,不
           知道是什么原因,望指教.
        delete  []  ptr;//释放动态申请的内存
     m_List2.AddString(str);
}


方法二:

1 从字符串列表stringList中取一项,复制到一个缓冲区中.
2 针对该缓冲区进行处理.
3 将该缓冲区的内容加入结果字符串列表.


vector<string>; stringList;
vector<string>; result;
char buffer[512];
vector<string>;::iterator iter = stringList.begin();
while (iter != stringList.end())
{
   strcpy(buffer, iter->;c_str());
   makeProcess(buffer);           //你说这里进行数据处理. 怎样处理,具体讲
                                  一下好吗?
   result.push_back(buffer);      //添加到结果字符串列表.
}


      这两种方法比较,关系到一个动态分配内存的问题,方法一用new和delete
来动态分配内存,方法二用vector容器,vector容器自行维护了自身的大小,不
用操心动态分配内存了,指针的错误毕竟会带来很多麻烦,
      但是,方法二从字符串列表stringList中取一项,复制到一个缓冲区中. 再 针对该缓冲区进行处理. 最后将该缓冲区的内容加入结果字符串列表. 这样就是一个一个的对数组进行处理,对于一个几十万的数组集合进行这样处理,程序运行是不是
会很慢.
/////////////////////////////////////////////////////////////////////////////////////






[请教你的问题]:
/////////////////////////////////////////////////////////////////////////////////////
      1,      
     if(*(ptr+1)=='5')
     {
           ptr=str+1;
           *ptr==' 3'||*ptr=='4' ;
       }    //  我在这里试着把数组的第二个元素5,用3和4来代替,程序运行没有
           警告和错误,但是,在最后的处理结果中没有把5用3和4代替了,不
           知道是什么原因,望指教.
       2,在最后的处理结果中一定会有大量重复的(完全一样的)数组,所以在程序
       中应该考虑删除相同的数组,也就是在最后输出结果中只有一个这样的
       数组.这个问题怎样解决.
       3,速度问题,怎样就会使这个程序跑的更快.请指教
/////////////////////////////////////////////////////////////////////////////////////
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP