欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++ 动态数组模版类Vector实例详解

程序员文章站 2024-03-27 08:01:03
1.实现机制内部主要通过m_capacity数组容量成员和m_length数组有效长度成员来维护一个t* data数组空间.内部默认分配一定数量大小的数组指针,每次append尾部追加的时候,无需再次...

1.实现机制

内部主要通过m_capacity数组容量成员和m_length数组有效长度成员来维护一个t* data数组空间.

内部默认分配一定数量大小的数组指针,每次append尾部追加的时候,无需再次分配空间,直接赋值标志length长度,假如超过当前空间容量,则再次扩大分配新的内存数组,并将旧数组拷贝至新数组及释放旧数组.

vector需要实现的public函数如下所示:

  • inline int capacity() 获取容量
  • inline int length() : 获取有效长度
  • void resize(int asize) : 改变数组的有效长度
  • void append(const t &t) : 尾部追加一个元素
  • t& operator[] (int i) : 通过[]获取元素
  • t operator[] (int i) const : 通过[]获取常量元素
  • void clear() :清空数组中的数据
  • inline bool isempty(): 数组是否有数据

resize()函数实现细节:

  • 如果resize长度大于当前容量时 : 则扩大分配新的内存数组,并将旧数组拷贝至新数组及释放旧数组.
  • 如果resize长度小于当前length时 : 则需要将多余的成员进行释放,调用析构函数实现.
  • 如果resize长度大于当前length时 : 则需要调用默认构造函数来填充内部数组.

2.代码实现

3.测试运行

测试如下所示:

运行如下所示:

C++ 动态数组模版类Vector实例详解

可以看到我们resize(13)后,由于 resize长度大于当前arr的length,所以则调用默认构造函数来填充内部数组.所以arr[10]至arr[12]的number为0。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!