用c++写一个可变长度的数组类模板Array ,用途存放若干元素,个数未知。

写一个可变长度的数组类Array ,用途存放若干元素,个数未知。

思路:
1、可采用动态分配内存的方法。首先要有三大要素:数组的缓冲区m_buffer、需要存放元素的总容量m_capacity,已存放的元素计数:m_size,这些作为类的私有成员变量。用构造函数进行初始化,总容量capacity作为构造函数的参数,m_buffer动态创建,大小为m_capacity,m_size初始化为0

2、创建传输参数的函数,参数为传入元素val。总容量是有限值,考虑到元素个数未知,因而需要一个动态扩容函数,该函数为私有成员函数。 动态扩容函数:输入元素数量是否超出总容量? -> 超出则调用函数->在原来capacity的基础上加上部分容量作为新容量大小传给n -> 开辟新内存buf -> 将旧内存m_buffer中的内容拷贝到新内存中 -> 释放旧内存 -> 更新成员变量,将新内存n赋值给m_capacity,新缓冲区buf赋值给m_buffer。将传入元素送入缓存区m_buffer[m_size] = value -> 计数 m_size++。

3、在类的共有成员中加入返回size和capacity的函数,方便查看数组信息。
源代码如下:

#include <stdio.h>
#include <string.h> 
//写一个可变长度的数组类Array ,用途存放若干元素,个数未知。 
template<typename T>
class Array
{
 public:
  Array(int capacity=16)
  {
   m_buffer = new T[capacity];
   m_capacity = capacity;
   m_size = 0; 
 	}
 void Pushback(T val)
 {
  if(m_size >= m_capacity)
  {
   Resize();
  }
  m_buffer[m_size] = val;
  m_size++; 
 
 int Size()
 {
  return m_size;
  } 
 int Capacity()
 {
  return m_capacity;
 }
  
 }
 private:
  T* m_buffer; // 缓冲区 ,用于存储需要传入数组的所有对象 注意要用指针的形式 
  int m_capacity; //容量 即缓冲区的大小
  
  // m_buffer m_capacity的关系类似于数组和数组的大小,都需要提前声明 
  int m_size; // 已经存放的对象的个数 
  void Resize()
  {
   //创建一个更大的缓冲区; 
   int n = m_capacity + 4;
   T* buf = new T[n];
   //拷贝原有的内容;
   memcpy(buf,m_buffer,m_capacity);
   //删除旧的内容 
   
   delete []m_buffer;
   
   //更新成员变量 
   m_capacity = n;
   m_buffer = buf;
  }  
};
int main()
{
 Array<int> a;
 a.Pushback(1);
 a.Pushback(2);
 a.Pushback(4);
 printf()
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值