• 大小: 6KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: 其他
  • 标签: 动态数组  

资源简介

动态数组(Dynamic Array)是指动态分配的、可以根据需求动态增长占用内存的数组。为了实现一个动态数组类的封装,我们需要考虑几个问题:new/delete的使用、内存分配策略、类的四大函数(构造函数、拷贝构造函数、拷贝赋值运算符、析构函数)、运算符的重载。 DArray类与String类(面试常考)的源码及测试代码下载。

资源截图

代码片段和文件信息

/*************************************************************************
    > File Name: DArray.cpp
    > Author: SongLee
    > E-mail: lisong.shine@qq.com
    > Created Time: 2014年07月28日 星期一 16时11分22秒
    > Personal Blog: http://songlee24.github.io
 ************************************************************************/
#include“DArray.h“
using namespace std;

void DArray::Init()
{
m_Size = 0;   // 默认情况下数组不包含元素
m_Max = 1;
m_Data = new double[m_Max];
}

void DArray::Free()
{
delete [] m_Data;
}

bool DArray::InvalidateIndex(int nIndex)
{
if(nIndex>=0 && nIndex return false;
else
return true;
}

// 默认构造函数
DArray::DArray()
{
Init();
}

// 构造函数
DArray::DArray(int nSize double dValue)
{
if(nSize == 0)
Init();
else
{
m_Size = nSize;
m_Max = nSize*2;
m_Data = new double[m_Max];
for(int i=0; i m_Data[i]=dValue;
}
}

// 拷贝构造函数
DArray::DArray(const DArray& arr)
{
m_Size = arr.m_Size;  /*复制常规成员*/
m_Max = arr.m_Max;
m_Data = new double[m_Max];   /*复制指针指向的内容*/
memcpy(m_Data arr.m_Data m_Size*sizeof(double));
}

// 拷贝赋值运算符
DArray& DArray::operator=(const DArray& arr)
{
if(this == &arr)  /*自赋值*/
return *this;
m_Size = arr.m_Size;
m_Max = arr.m_Max;
/* 先将右侧对象拷贝到临时对象中,然后再销毁左侧对象*/ 
double *m_Temp = new double[m_Max];
memcpy(m_Temp arr.m_Data m_Size*sizeof(double));
delete [] m_Data;
m_Data = m_Temp;

return *this;
}

// 析构函数
DArray::~DArray()
{
Free();
}

// 打印数组
void DArray::Print()
{
if(m_Size == 0)
{
cout << “Error: The empty array can‘t be Printed.“ << endl;
exit(0);
}
else
{
for(int i=0; i cout << m_Data[i] << “ “;
cout << endl;
}
}

// 获取数组大小
int DArray::GetSize()
{
return m_Size;
}

// 重置数组大小
void DArray::SetSize(int nSize)
{
if(nSize < m_Size)   /*截断*/
{
for(int i=nSize; i m_Data[i] = 0;
}
if(m_Size<=nSize && nSize<=m_Max)  /*新增元素置0*/
{
for(int i=m_Size; i m_Data[i] = 0;
}
if(nSize > m_Max)   /*需要重新分配空间*/
{
m_Max = nSize*2;
double *temp = new double[m_Max];
memcpy(temp m_Data m_Size*sizeof(double));
for(int i=m_Size; i temp[i] = 0;
delete [] m_Data;
m_Data = temp;
}
m_Size = nSize; /*设置数组大小*/
}

// 获取指定位置元素
double DArray::GetAt(int nIndex)
{
if(InvalidateIndex(nIndex))
{
cout << “Error: the index of GetAt is invalid!“ << endl;
exit(0);
}
return m_Data[nIndex];
}

// 设置指定位置元素的值
void DArray::SetAt(int nIndex double dValue)
{
if(InvalidateIndex(nIndex))
{
cout << “Error: the index of SetAt is invalid!“ << endl;
exit(0);
}
else
{
m_Data[nIndex] = dValue;
}
}

// 追加一个新元素到数组末尾
void DArray::PushBack(double dValue)
{
if(m_Size < m_Max)
{
m_Data[m_Size] = dValue;
}
else  
{
m_Max = m_Max*2;
double* temp = new double[m_Max];
memcpy(temp m_Data m_Size*sizeof(double));
delete [] m_Data;
m_Data = temp;
m_Data[m_Size] = dValue;
}
++m_Size;  /*数组大小加1*/
}

// 从数组中删除一个元素
void DArray::DeleteAt(int nIndex)
{
if(InvalidateIndex(nIndex))
{
cout << “Erro

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-07-29 06:53  Dynamic_Array\
     目录           0  2014-07-29 09:01  Dynamic_Array\String\
     文件         940  2014-07-29 08:40  Dynamic_Array\String\Test.cpp
     文件        1228  2014-07-29 08:29  Dynamic_Array\String\String.h
     文件        2188  2014-07-29 08:30  Dynamic_Array\String\String.cpp
     目录           0  2014-07-29 06:54  Dynamic_Array\DArray\
     文件         966  2014-07-28 15:15  Dynamic_Array\DArray\Test.cpp
     文件        1742  2014-07-28 13:59  Dynamic_Array\DArray\DArray.h
     文件        4389  2014-07-28 17:16  Dynamic_Array\DArray\DArray.cpp

评论

共有 条评论