博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用动态数组结构的一个好处
阅读量:2430 次
发布时间:2019-05-10

本文共 2027 字,大约阅读时间需要 6 分钟。

 

 

作者:朱金灿

来源:

 

      请注意,这里我所说的动态数组不是指你自己new 出来的数组,而是指STL 中的std::vectorMFC 中的CArray 之类的容器。开始以为使用std::vector 不过是免除动态内存之苦。免除自己手动开辟和释放内存是一方面,实际上在使用的过程中你会逐渐发现使用std::vector 的好处。今天我就发现了一个好处。

 

今天我修改别人写的一个图像匹配算法,所谓图像匹配就是找出两幅图像中相同的地方,在我这个算法中就是找出匹配结果点。别人的代码大致是这样的:

    说实话我不喜欢这种函数的设计,为什么呢?因为我觉得为了很好地避免内存泄露的话,最好遵循这样一个原则:函数外部申请的内存函数外部释放,函数内部申请的内存在函数内存释放,如果像上面的函数设计,用户往往会忘记释放 pResultPt 的内存,而且这种释放也令人感觉不自然。开始我想这样改为这样设计:

调用这个函数的部分代码:

     上面的代码符合了函数外部申请的内存函数外部释放,函数内部申请的内存在函数内存释放的原则,但是依然给人别扭的感觉,首先是要找匹配点,先得开一个整幅图的大数组(满足找匹配点的需要,担心不够用),然而匹配点往往只占图像的一小部分;其次是输入的函数的参数增多了,除了输入匹配点数组指针,还得输入数组的难度,输入参数增多往往增加了用户的使用难度,比如用户可能会搞不清楚 long InitPtNum 这个参数所代表的意义

 

最后我想比较理想的设计是什么呢?用户只需要输入两幅图像的文件句柄和动态数组,调用后返回这个数组就行。于是我想到了下面这个设计:

这样设计,首先免去开辟和释放内存之累,其次你再也不用开辟一大块内存去应对一个不确定的情况,三是别人使用起来非常自然。

 

   由此看来,适当使用现成的动态数组结构可以使我们的设计更为合理。

转载地址:http://kbimb.baihongyu.com/

你可能感兴趣的文章
docker安装
查看>>
网页可以访问linux源,但是apt-get更新时总是Failed to fetch
查看>>
利用JSR-303做验证验证service层
查看>>
Java8使用流处理将String字符串转成List<Long>数据格式
查看>>
Java为什么可以一次编写,到处运行?
查看>>
Java程序员必看的 13 本 Java 书籍
查看>>
代码规范化必备书籍
查看>>
收集的描述软件质量的词语
查看>>
PostgreSQL - update语句怎么关联多个表
查看>>
IntelliJ IDEA 超实用使用技巧分享
查看>>
年过35岁的程序员爆料:大龄程序员们的花样出路
查看>>
一些好词好句
查看>>
用ArcMap为表增加一个新字段
查看>>
postgresql——条件判断函数
查看>>
IDEA 2018.2 升级到 IDEA 2019.2,中文字体渲染问题 中文显示异常
查看>>
PostgresSql 多表关联删除语句
查看>>
MySQL 千万 级数据量根据(索引)优化 查询 速度
查看>>
详解VSCode配置启动Vue项目
查看>>
沟通是人最基本的生存能力
查看>>
解决windows10中springboot的jar启动之后的假死状态
查看>>