动态数组c++

#include <iostream>
using namespace std;

//默认情况下动态数组的长度为2

template <class DataType>
class Array
{
public:
 Array(int size = 2);
 Array(const Array<DataType> &copy);
 Array<DataType>& operator=(const Array<DataType> &right);
 ~Array();
 DataType &operator[](int index);
 void ChangeSize(int size);
 int GetSize()const;
private:
 inline void DeepCopy(const Array<DataType> &origin);
 DataType *element;
 int capacity;
};

template< class DataType>
Array<DataType>::Array(int size)
{
 if(size < 1)
 {
       capacity = 2;
 }
 else
 {
  capacity = size;
 }
 element = new DataType[capacity];
}

template <class DataType>
Array<DataType>::Array(const Array<DataType> &copy)
{
 DeepCopy(copy);
}

template <class DataType>
Array<DataType>& Array<DataType>::operator=(const Array<DataType> &right)
{
 if(this == &right)
 {
  return *this;
 }
 delete []element;
 DeepCopy(right);
 return *this;
}

template <class DataType>

Array<DataType>::~Array()
{
 delete []element;
}

template < class DataType>
DataType& Array<DataType>::operator[](int index)
{

 return element[index];
}

template <class DataType>
void Array<DataType>::ChangeSize(int size)
{
 if((size<1) || (size==capacity))
 {
  return;
 }
 DataType *newelement = new DataType[size];
 int limit = (size>capacity) ? capacity : size;
 for(int i=0; i<limit; i++)
 {
  newelement[i] = element[i];
 }
 delete []element;
 element = newelement;
 capacity = size;
}

template<class DataType>
inline void Array<DataType>::DeepCopy(const Array<DataType> &origin)
{
 capacity = origin.capacity;
 for(int i=0; i<capacity; i++)
 {
  element[i] = origin.element[i];
 }
}

template<class DataType>
int Array<DataType>::GetSize()const
{
 return capacity;
}
int main()
{
 Array<int> arr(20);
 for(int i=0; i<20; i++)
 {
  arr[i] = i;
 }
 for(int j=0; j<20; j++)
 {
  cout<<"  "<<arr[j];
 }
 cout<<endl;
 arr.ChangeSize(arr.GetSize()<<1);
 for(int m=20; m<40; m++)
 {
  arr[m] = m;
 }
 for(int k=0; k<40; k++)
 {
  cout<<"  "<<arr[k];
 }

 cout<<endl;
 return 0;
}

### C++动态数组的创建与使用 在 C++ 编程语言中,动态数组是一种通过指针管理内存的方式,在运行时分配所需大小的空间。这种方式允许程序根据实际需求灵活调整存储空间。 #### 动态数组的创建 可以通过 `new` 运算符来申请一块连续的内存区域用于存储数据。以下是具体实现方法: ```cpp #include <iostream> using namespace std; int main() { int size; cout << "请输入数组大小: "; cin >> size; // 使用 new 创建动态数组 int* array = new int[size]; // 初始化数组元素 for (int i = 0; i < size; ++i) { array[i] = i * 10; } // 输出数组内容 cout << "数组中的元素为:" << endl; for (int i = 0; i < size; ++i) { cout << array[i] << " "; } cout << endl; // 删除动态数组以释放内存 delete[] array; return 0; } ``` 上述代码展示了如何利用 `new` 和 `delete[]` 来操作动态数组[^1]。其中需要注意的是,当不再需要该数组时,应显式调用 `delete[]` 释放其占用的堆内存资源,防止发生内存泄漏。 #### 动态数组的特点 相比静态数组而言,动态数组具有如下优势: - **灵活性高**:可以在程序执行过程中决定数组的实际长度。 - **节省空间**:仅需为必要的元素数量分配足够的内存位置。 然而也存在一些局限性,比如如果忘记释放已分配但不再使用的内存,则会造成浪费;另外频繁地请求和归还大块内存可能会降低性能效率[^2]。 #### 注意事项 为了安全有效地运用动态数组,请牢记以下几点建议: - 始终成对地使用 `new` 和对应的 `delete` 或者 `new []` 及 `delete []` ,确保每一段被开辟出来的额外储存区域能够得到及时清理回收; - 避免越界访问错误——即尝试读写超出有效索引范围之外的数据项; - 考虑采用更现代化的标准库容器类(如 vector),它们可以自动处理许多底层细节问题从而简化开发流程并增强可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值