動態數組的接口與實現(已調試完成)
常用接口:
class ArrayList
{
private:
int m_size;
int * m_element;
int m_capacity;
static const int DEFAULT_CAPACITY = 10;
static const int ELEMENT_NOR_FOUND = -1;
private:
void ensureCapacity(int capacity);
public:
//無參構造函數
ArrayList();
ArrayList(int capacity);
~ArrayList();
public:
//元素的數量
int size();
//數組是否爲空
bool isEmpty();
//是否包含某個元素
bool contains(int element);
//添加元素 到最後
void add(int element);
//返回對應位置的元素
int get(int index);
//設置index位置的元素
int set(int index, int element);
//往index位置添加元素
void add(int index, int element);
//刪除index位置的元素
int remove(int index);
//查看元素的位置
int indexof(int element);
//清除所有的元素
void clear();
//打印數組
void printArray();
//數組的長度
int length();
//刪除對應的元素
void removeforE(int element);
};
接口的實現
#include "ArrayList.h"
ArrayList::ArrayList()
{
this->m_element = new int[DEFAULT_CAPACITY];
this->m_size = 0;
this->m_capacity = DEFAULT_CAPACITY;
}
ArrayList::ArrayList(int capacity)
{
capacity = (capacity < DEFAULT_CAPACITY) ? DEFAULT_CAPACITY : capacity;
this->m_element = new int[capacity];
this->m_size = 0;
this->m_capacity = capacity;
}
ArrayList::~ArrayList()
{
if (this->m_element != NULL)
{
delete[] this->m_element;
this->m_element = NULL;
}
}
int ArrayList::size()
{
return this->m_size;
}
bool ArrayList::isEmpty()
{
/*if (this->m_size == 0)
{
return true;
}
else
{
return false;
}*/
return this->m_size == 0;
}
bool ArrayList::contains(int element)
{
return indexof(element) != ELEMENT_NOR_FOUND;
}
void ArrayList::add(int element)
{
add(this->m_size, element);
}
int ArrayList::get(int index)
{
if (index < 0||index >= this->m_size)
{
printf("func get() err\n");
return 0;
}
return this->m_element[index];
}
int ArrayList::set(int index, int element)
{
if (index < 0 || index >= this->m_size)
{
printf("func set() err\n");
return 0;
}
int oldelement = this->m_element[index];
this->m_element[index] = element;
return oldelement;
}
void ArrayList::add(int index, int element)
{
if (index < 0 || index > this->m_size)
{
printf("func add(nt index, int element) err\n");
return;
}
ensureCapacity(this->m_size+1);
for (int i = this->m_size-1; i >= index; i--)
{
this->m_element[i + 1] = this->m_element[i];
}
this->m_element[index] = element;
this->m_size++;
return ;
}
int ArrayList::remove(int index)
{
if (index < 0 || index >= this->m_size)
{
printf("func remove() err\n");
return 0;
}
int oldelement = this->m_element[index];
for (int i = index; i < this->m_size; i++)
{
this->m_element[i] = this->m_element[i + 1];
}
this->m_size--;
return oldelement;
}
int ArrayList::indexof(int element)
{
for (int i = 0; i < this->m_size; i++)
{
if (element == this->m_element[i])
{
return i;
}
}
return ELEMENT_NOR_FOUND;
}
void ArrayList::clear()
{
this->m_size = 0;
}
void ArrayList::printArray()
{
for (int i = 0; i <this->m_size; i++)
{
if (i == 0)
{
printf("size = %d, array:[%d,", this->m_size, this->get(i));
continue;
}
if (i == this->m_size - 1)
{
printf("%d] \n", this->get(i));
continue;
}
printf("%d,", this->get(i));
}
}
int ArrayList::length()
{
return this->m_capacity;
}
void ArrayList::ensureCapacity(int capacity)
{
int oldCapacity = this->length();
if (oldCapacity >= capacity)
{
return;
}
int newCapacity = oldCapacity + (oldCapacity >> 1);
int * newelement = new int[newCapacity];
for (int i = 0; i < this->m_size; i++)
{
newelement[i] = this->m_element[i];
}
delete[] this->m_element;
this->m_element = newelement;
this->m_capacity = newCapacity;
cout << "擴容:" << oldCapacity << "—" << newCapacity << endl;
}
void ArrayList::removeforE(int element)
{
/*int pos = 0;
for (int i = 0; i < this->m_size; i++)
{
if (this->m_element[i] == element)
{
pos = i;
}
}
int oldelement = this->m_element[pos];
for (int i = pos; i < this->m_size; i++)
{
this->m_element[i] = this->m_element[i + 1];
}
this->m_size--;
return oldelement;*/
remove(indexof(element));
}