CObjArray和CObjList的语义差别?

strangecat 2000-02-08 01:48:00
加精
用CObjArray的时候总觉得挺别扭的.这个Array好象和C/C++的数组不大一样.
在C/C++中数组的内存空间是先分配好的.而在使用CObjArray时好象还要人工
为个个数组元素分配内存,比如有CObjArray objarray ,必须先new,然后才
能objarray.Add().而不能直接objarray[i]=...
如果这样不是跟CObjList一样了?
不知道对CObjArray的理解是否正确,请各位指教.
...全文
295 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
netmare 2000-02-09
  • 打赏
  • 举报
回复
虽然二者的接口函数差不多,但其效率是不同的,CObArray类似于数组,插入,删除,扩大,缩小时效率很低,但访问数据元素快,直接使用索引就行了.举例:CObArray插入数据元素时,如插入在第i个元素的位置,则要将当前的第i个及其以后的所有元素向后移动一个位置.
CObList是链表,因此插入,删除,扩大,缩小时效率很高,但访问时需要沿着链表,一个一个元素往下找,速度慢.但CObList插入数据元素时,只需改变插入位置的两个元素中的指针而已.
所以使用哪种数据结构,要看你的程序的需要,比如结构较稳定,不经常插入元素,且要求访问时速度快,可使用CObArray.反之,经常插入,删除数据,就最好使用CObList.
strangecat 2000-02-08
  • 打赏
  • 举报
回复
同意netmare所说的,但是如果只有数据结构意义上的不同的话,要CObjList有什么意义呢?事实上两者给出的接口函数大同小异,用CObjArray完全可以替代CObjList.继续求教.
netmare 2000-02-08
  • 打赏
  • 举报
回复
CObArray类似于c/c++中的数组,但它是可以动态增长或缩小的,不过它的结构仍然是一个数组(一块连续的存储区),因为动态增,所以加入新元素时,必须用CObArray::Add,这样当需要时,数组就会变大,而CObArray::operator []的功能等同于CObArray::SetAt/GetAt,它只能用当前数组大小之内的索引值来操作,你所说的必须先new,是不是指要new CObject,这是因为CObArray中的元素必须是CObject*类型的.
CObList是链表,二者在数据结构的意义上是不同的.

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧