-
大小: 6KB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2021-06-13
- 語言: 其他
- 標(biāo)簽: 動態(tài)數(shù)組??
資源簡介
動態(tài)數(shù)組(Dynamic Array)是指動態(tài)分配的、可以根據(jù)需求動態(tài)增長占用內(nèi)存的數(shù)組。為了實(shí)現(xiàn)一個(gè)動態(tài)數(shù)組類的封裝,我們需要考慮幾個(gè)問題:new/delete的使用、內(nèi)存分配策略、類的四大函數(shù)(構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、拷貝賦值運(yùn)算符、析構(gòu)函數(shù))、運(yùn)算符的重載。
DArray類與String類(面試常考)的源碼及測試代碼下載。

代碼片段和文件信息
/*************************************************************************
????>?File?Name:?DArray.cpp
????>?Author:?SongLee
????>?E-mail:?lisong.shine@qq.com
????>?Created?Time:?2014年07月28日?星期一?16時(shí)11分22秒
????>?Personal?Blog:?http://songlee24.github.io
?************************************************************************/
#include“DArray.h“
using?namespace?std;
void?DArray::Init()
{
m_Size?=?0;???//?默認(rèn)情況下數(shù)組不包含元素
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;
}
//?默認(rèn)構(gòu)造函數(shù)
DArray::DArray()
{
Init();
}
//?構(gòu)造函數(shù)
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;
}
}
//?拷貝構(gòu)造函數(shù)
DArray::DArray(const?DArray&?arr)
{
m_Size?=?arr.m_Size;??/*復(fù)制常規(guī)成員*/
m_Max?=?arr.m_Max;
m_Data?=?new?double[m_Max];???/*復(fù)制指針指向的內(nèi)容*/
memcpy(m_Data?arr.m_Data?m_Size*sizeof(double));
}
//?拷貝賦值運(yùn)算符
DArray&?DArray::operator=(const?DArray&?arr)
{
if(this?==?&arr)??/*自賦值*/
return?*this;
m_Size?=?arr.m_Size;
m_Max?=?arr.m_Max;
/*?先將右側(cè)對象拷貝到臨時(shí)對象中,然后再銷毀左側(cè)對象*/?
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;
}
//?析構(gòu)函數(shù)
DArray::~DArray()
{
Free();
}
//?打印數(shù)組
void?DArray::Print()
{
if(m_Size?==?0)
{
cout?<“Error:?The?empty?array?can‘t?be?Printed.“?< exit(0);
}
else
{
for(int?i=0;?i cout?< cout?< }
}
//?獲取數(shù)組大小
int?DArray::GetSize()
{
return?m_Size;
}
//?重置數(shù)組大小
void?DArray::SetSize(int?nSize)
{
if(nSize? {
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;?/*設(shè)置數(shù)組大小*/
}
//?獲取指定位置元素
double?DArray::GetAt(int?nIndex)
{
if(InvalidateIndex(nIndex))
{
cout?<“Error:?the?index?of?GetAt?is?invalid!“?< exit(0);
}
return?m_Data[nIndex];
}
//?設(shè)置指定位置元素的值
void?DArray::SetAt(int?nIndex?double?dValue)
{
if(InvalidateIndex(nIndex))
{
cout?<“Error:?the?index?of?SetAt?is?invalid!“?< exit(0);
}
else
{
m_Data[nIndex]?=?dValue;
}
}
//?追加一個(gè)新元素到數(shù)組末尾
void?DArray::PushBack(double?dValue)
{
if(m_Size? {
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;??/*數(shù)組大小加1*/
}
//?從數(shù)組中刪除一個(gè)元素
void?DArray::DeleteAt(int?nIndex)
{
if(InvalidateIndex(nIndex))
{
cout?<“Erro
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????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
評論
共有 條評論