第1关:构造函数与析构函数的实现
/********** BEGIN **********/
#include <iostream>
#include "ArrayList.h"
using namespace std;
ArrayList::ArrayList() { size = 0; }
ArrayList::ArrayList(const ArrayList &rhs) {
data = rhs.data;
size = rhs.size;
}
ArrayList::ArrayList(int const a[], int n) {
size = n;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = a[i];
}
ArrayList::ArrayList(int n, int value) {
size = n;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = value;
}
ArrayList::~ArrayList() { delete []data; }
/********** END **********/
第2关:成员函数的实现
#include <iostream>
#include "ArrayList.h"
using namespace std;
ArrayList::ArrayList() {
size = 0;
capacity = 1000;
data = new int[1000];
}
ArrayList::ArrayList(const ArrayList &rhs) {
data = rhs.data;
size = rhs.size;
}
ArrayList::ArrayList(int const a[], int n) {
size = n;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = a[i];
}
ArrayList::ArrayList(int n, int value) {
size = n;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = value;
}
ArrayList::~ArrayList() { delete []data; }
void ArrayList::setCapacity(int newCapa) {
capacity = newCapa;
int arr[100];
for (int i = 0; i < size; i++)
arr[i] = data[i];
delete []data;
data = new int[capacity];
for (int i = 0; i < size; i++)
data[i] = arr[i];
}
void ArrayList::insert(int pos, int value) {
int k;
for (k = size - 1; k >= pos; k--)
data[k+1] = data[k];
data[pos] = value;
size++;
}
void ArrayList::remove(int pos) {
int k;
for (k = pos + 1; k < size; k++)
data[k-1] = data[k];
size--;
}
void ArrayList::modify(int pos, int newValue) {
data[pos] = newValue;
}
int ArrayList::at(int pos) const {
return data[pos];
}
void ArrayList::disp() const {
for (int i = 0; i < size; i++)
cout << data[i] << " ";
cout << endl;
}
第3关:异常检测
#include <iostream>
#include <stdexcept>
#include "ArrayList.h"
using namespace std;
using std::invalid_argument;
using std::bad_alloc;
ArrayList::ArrayList()noexcept(false) {
size = 0;
capacity = 1000;
data = new int[1000];
}
ArrayList::ArrayList(const ArrayList &rhs)noexcept(false) {
data = rhs.data;
size = rhs.size;
}
ArrayList::ArrayList(int const a[], int n)noexcept(false) {
if (n < 0)
throw std::invalid_argument("ArrayList");
if (n > 3)
throw std::invalid_argument(" ");
size = n;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = a[i];
}
ArrayList::ArrayList(int n, int value)noexcept(false) {
if (n < 0)
throw std::invalid_argument("ArrayList");
size = n;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = value;
}
ArrayList::~ArrayList()noexcept { delete []data; }
void ArrayList::setCapacity(int newCapa)noexcept(false) {
capacity = newCapa;
int arr[100];
for (int i = 0; i < size; i++)
arr[i] = data[i];
delete []data;
data = new int[capacity];
for (int i = 0; i < size; i++)
data[i] = arr[i];
}
void ArrayList::insert(int pos, int value)noexcept(false) {
if (pos >= size || pos < 0)
throw std::invalid_argument("insert");
int k;
for (k = size - 1; k >= pos; k--)
data[k+1] = data[k];
data[pos] = value;
size++;
}
void ArrayList::remove(int pos)noexcept(false) {
if (pos >= size || pos < 0)
throw std::invalid_argument("remove");
int k;
for (k = pos + 1; k < size; k++)
data[k-1] = data[k];
size--;
}
void ArrayList::modify(int pos, int newValue)noexcept(false) {
if (pos >= size || pos < 0)
throw std::invalid_argument("modify");
data[pos] = newValue;
}
int ArrayList::at(int pos) const noexcept(false){
if (pos >= size || pos < 0)
throw std::invalid_argument("at");
return data[pos];
}
void ArrayList::disp() const noexcept {
for (int i = 0; i < size; i++)
cout << data[i] << " ";
cout << endl;
}
第4关:运算符重载和完整的ArrayList类
#include <iostream>
#include "ArrayList.h"
#include <stdio.h>
using namespace std;
ArrayList::ArrayList()
{
data=new int[1000];
size=0;
capacity=1000;
}
ArrayList::ArrayList(const ArrayList&rhs)
{
capacity=rhs.capacity;
size=rhs.size;
data = new int[capacity];
for(int i=0;i<size;i++)
{
data[i]=rhs.data[i];
}
}
ArrayList::ArrayList(int const a[],int n)
{
capacity=n+10;
size=n;
data = new int[capacity];
for(int i=0;i<size;i++)
{
data[i]=a[i];
}
}
ArrayList::ArrayList(int n,int value)
{
capacity=n+100;
size=n;
data = new int[capacity];
for(int i=0;i<size;i++)
{
data[i]=value;
}
}
ArrayList::~ArrayList()
{
delete[]data;
data=nullptr;
size=0;
capacity=0;
}
void ArrayList::setCapacity(int newCapa)
{
if(newCapa<capacity)
return;
int* old=data;
capacity=newCapa;
data = new int[capacity];
for(int i=0;i<size;i++)
{
data[i]=old[i];
}
delete[]old;
}
void ArrayList::insert(int pos,int value)
{
if(size==capacity)
{
setCapacity(capacity+10);
}
for(int i=size-1;i>=pos;i--)
{
data[i+1]=data[i];
}
data[pos]=value;
size++;
}
void ArrayList::remove(int pos)
{
for(int i=pos+1;i<size;i++)
{
data[i-1]=data[i];
}
size--;
}
int ArrayList::at(int pos)const
{
return data[pos];
}
void ArrayList::modify(int pos,int newValue)
{
data[pos]=newValue;
}
void ArrayList::disp()const
{
for(int i=0;i<size;i++)
{
std::cout<<data[i]<<" ";
}
std::cout<<std::endl;
}
ArrayList& ArrayList::operator = (const ArrayList&rhs)
{
size=rhs.size;
for(int i=0;i<size;i++)
{
data[i]=rhs.data[i];
}
return *this;
}
ArrayList& ArrayList::operator += (const ArrayList&rhs)
{
for(int i=size;i<size+rhs.size;i++)
{
data[i]=rhs[i-size];
}
size+=rhs.size;
return *this;
}
int& ArrayList::operator [] (int pos)
{
return data[pos];
}
const int& ArrayList::operator [] (int pos)const
{
return data[pos];
}