vector是怎么实现的??

lengmozaixian 2009-04-01 10:37:09
我在编程代码中见到类似这样的定义:typedef std::vector<XQQuery*, XQillaAllocator<XQQuery*> > ImportedModules;查找其定义找到一个vector文件
template<class _Ty,
class _Ax>
class vector
: public _Vector_val<_Ty, _Ax>
{ // varying size array of values
public:
typedef vector<_Ty, _Ax> _Myt;
typedef _Vector_val<_Ty, _Ax> _Mybase;
typedef typename _Mybase::_Alty _Alloc;
typedef _Alloc allocator_type;
typedef typename _Alloc::size_type size_type;
typedef typename _Alloc::difference_type _Dift;
typedef _Dift difference_type;
typedef typename _Alloc::pointer _Tptr;
typedef typename _Alloc::const_pointer _Ctptr;
typedef _Tptr pointer;
typedef _Ctptr const_pointer;
typedef typename _Alloc::reference _Reft;
typedef _Reft reference;
typedef typename _Alloc::const_reference const_reference;
typedef typename _Alloc::value_type value_type;

#define _VEC_ITER_BASE(it) (it)._Myptr

这只是一部分代码,我想问的是,此时的vector和STL中的vector一样吗?STL中vector一般都是形如vector<int>或vector< vector<int> >,这里的vector是怎么回事??是不是也可以有vector<int,int>,STL中的容器自己也可以起同样的名字对其重新定义吗?上面vector的形式在后面的代码中也用到了iterator迭代器,若是自己重新定义一个vector也可以用iterator来遍历?
...全文
1366 34 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxgiter 2009-04-04
  • 打赏
  • 举报
回复
看源码啊~
gao125210 2009-04-04
  • 打赏
  • 举报
回复
学习了,
love514425 2009-04-04
  • 打赏
  • 举报
回复
vector <> 是一个动态数组,它的数组元素可以是各种基本数据类型,也可以是你的自定义类型.
Laozql 2009-04-04
  • 打赏
  • 举报
回复
STL很好用,不过其原理了解即可!
kimoserver 2009-04-03
  • 打赏
  • 举报
回复
学习了
必成桂 2009-04-03
  • 打赏
  • 举报
回复
c++ standard定义了 vector 的标准接口, vector的实现有很多版本,标准并没有规定你必须用哪一个版本。

收录到c++ standard的实现是 std::vector.

一般的vector的实现是通过对连续的内存 的管理 来实现动态增长的, 其内存管理 托管给 allocator来进行。
Paradin 2009-04-03
  • 打赏
  • 举报
回复
第二个参数有默认值的。
侯捷有本书专门剖析STL的。
nullah 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 oyljerry 的回复:]
vector <> 是一个动态数组,它的数组元素可以是各种基本数据类型,也可以是你的自定义类型,iterator是STL的迭代器,通过它可以访问STL中的各种容器等...
[/Quote]
up
SearchLife 2009-04-03
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
STL里的vector是标准的模板类.
实现的机制参考这篇
http://scholar.ilib.cn/A-wjsjyy200505051.html
genius_tong 2009-04-02
  • 打赏
  • 举报
回复
学习~
wjb_yd 2009-04-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wanggang999 的回复:]
如果你用的C++编译器里面可以使用std::vector,
你就去看看vector的头文件就知道stl的vector是怎么实现的了,
看不懂的话,可以看侯捷的《STL源码剖析》,
还看不懂的话,就先看看《C++ Template》(有中文版),
然后自己看看你接触到的这个vector的实现,
比较一下就知道是不是一样的东西了。
至于你后面的问题,等你看完了我推荐的书,自然知道答案。

类似的问题,很难几句话说清楚,与其临渊羡鱼,不如退而结网,
去…
[/Quote]

说的极是啊...
beyond071 2009-04-02
  • 打赏
  • 举报
回复
学习了
jakqigle 2009-04-02
  • 打赏
  • 举报
回复
动态可变长数组。
Proteas 2009-04-02
  • 打赏
  • 举报
回复
STL是开源的,你可以下载boost的看看啊。
hai040 2009-04-02
  • 打赏
  • 举报
回复
template<class _Ty,
class _Ax = allocator<_Ty> >
class vector
: public _Vector_val<_Ty, _Ax>
那段原码少了些东西吧
vector第二个模板参数有缺省值
平时使用的是缺省值

vector<int, int>不行是因为第二个类型必须有一些特定的操作
ysysbaobei 2009-04-02
  • 打赏
  • 举报
回复
flameearth 2009-04-02
  • 打赏
  • 举报
回复
就是个数组啊 每次插入新元素的时候 如果空间不够 就会从新声请数组 然后将以前的再拷贝过去~~
fairchild811 2009-04-02
  • 打赏
  • 举报
回复
动态数组

另外:4楼的代码能运行吗?
cxxer 2009-04-02
  • 打赏
  • 举报
回复
STL
加载更多回复(14)

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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