您的位置:程序门 -> c/c++ -> c++ 语言



指针与vector类如何区别使用


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


指针与vector类如何区别使用
发表于:2007-10-18 13:42:29 楼主
在许多情况下,既可以用指针也可以用vector,这两者到底应该如何区别使用?

在我的观念里,指针要想申请连续的空间必须提前知道要申请空间的维数,且不能往上添加额外的元素。
而对于vector容器类,不必要知道连续空间的维数,直接往里添加既可。并且能够添加额外的元素,但是定义时系统会给定一较大的连续空间。

那是否就是说若知道了要申请的连续空间的维数,用指针,若不知则用vector类?
发表于:2007-10-18 14:13:071楼 得分:0
要申请的连续空间的维数,用指针
---
用数组吧,确定元素个数的

常规数组如果要扩展比较麻烦,自己的去做比较多的工作,还有越界等问题
vector简单的看就是动态数组,利用其接口完成访问,添加就行了,空间不够时,
会自己去申请新的空间,

定义时系统会给定一较大的连续空间
---
你往vector里存放很多数据时才会,其存储数据使用的也是堆上的空间
发表于:2007-10-18 15:12:312楼 得分:0
        在我的观念里,指针要想申请连续的空间必须提前知道要申请空间的维数,且不能往上添加额外的元素。
          这个观念很有问题,要知道指针可是管理内存最强大也最灵活的工具,你说的这个只是一般数组的概念而已,而真正指针却是无所不能,而vector容器类的底层实现也是离不开指针的。。。
发表于:2007-10-18 15:18:273楼 得分:0
楼主说的意思匪夷所思阿,你说的都对,但是指针分配内存和vector根本没有任何逻辑联系,有什么疑问的呢。vector的实现并不是单单为了不用自己分配连续内存上限而设置的。
发表于:2007-10-18 15:43:144楼 得分:0
其实我最喜欢用的就是vector类,指针容易出现这样或者那样的问题(例如内存泄露,野指针等等)。但是是否vector类就一定比指针优呢?

vector类变量一定义,系统就给它分配了较大的连续空间,以备于往里添加元素,如果定义的vector类多了会不会增大内存量呢?
其实指针也可以实现元素的不断添加,链表就是一个特例,但是链表所被分配的空间并不是连续的,而是间断的,这是它不如vector类的地方;反过来链表也有优于vector类的地方,就是它不需要预先申请较大的连续空间,有多少个元素它就申请多少空间。
发表于:2007-10-18 15:44:405楼 得分:0
因为变量存储的内部机制,以及在整个程序过程中的存在状态我不是很了解,所以可能理解问题会比较偏激,希望大家多多提点。
发表于:2007-10-18 15:57:156楼 得分:0
在许多情况下,既可以用指针也可以用vector,这两者到底应该如何区别使用?  
================================================================
vector是容器,而且你完全可以用指针+模板   实现vector。

在我的观念里,指针要想申请连续的空间必须提前知道要申请空间的维数,且不能往上添加额外的元素。  
而对于vector容器类,不必要知道连续空间的维数,直接往里添加既可。并且能够添加额外的元素,但是定义时系统会给定一较大的连续空间。  


那是否就是说若知道了要申请的连续空间的维数,用指针,若不知则用vector类?  
=================================
推荐看《stl源代码剖析》
vector有个配置器。申请空间的时候会调用他的,对于vector容器来说,vector分配的空间是连续的。
发表于:2007-10-18 16:28:497楼 得分:0
vectror不一定比指针优,只不过使用更加方便安全些罢了
就看你自己怎么用了。个人喜欢用stl的东东多些
发表于:2007-10-19 16:02:478楼 得分:0
这两个没什么关系的吧。据我所知道的,vector是维护着一个内存块,一开始分配比较大的空间,如果到后来空间不够的时候,它会重新分配一个更大的空间,并把之前的数据重新拷贝到新的空间上,并删除之前的空间。

内存块呢,自己想怎么用就怎么划分吧。。
发表于:2007-10-20 16:27:219楼 得分:0
8楼所提供的信息倒是以前没有看到过的,又学了一个新知识。
但是我的问题还是没有解决啊。换种问法:当vector变量定义较多的话,会不会对计算机存储方面(或者应该说是空间使用方面)造成影响?这应该是在算法实现的过程中需要考虑的吧?


快速检索

最新资讯
热门点击