动态数组(int型、整型),可自动扩容

如果直接定义一个数组,数组初始化后的长度是固定的,存入的数据数量有限,无法扩容存入更多数据。
利用C++的抽象类可实现可扩容的动态数组。功能:

  1. add(int dat):向数组插入一个数据
  2. get(int index):按照索引(下标)获取数组中的数据
  3. size():得到数组的大小
  4. travel():把数组打印一遍
  5. remove(int index):按照索引(下标)删除数组中的数据
//可扩容的动态int型数组,例程:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>

using namespace std;
int count = 1;

class List {
public:
	virtual void add(int dat) = 0;
	virtual int get(int index) = 0;
	virtual int size() = 0;
	virtual void travel() = 0;
	virtual int remove(int index) = 0;

	virtual ~List() {
	}
	;
};

class ArrayList: public List {
public:
	ArrayList() {
		len = 10;
		arr_Size = 0;
		this->arr = new int[len];
		//printf("No.%d\tarr.addr=%p\n", count++, arr);

	}
	~ArrayList() {
		//printf("No.%d\tarr.addr=%p\n", count++, arr);
		delete[] arr;
	}
	void add(int dat) {
		*(arr + arr_Size) = dat;
		arr_Size++;
		if (arr_Size >= len) {
			arr_Expansion();
		}
	}
	int size() {
		return arr_Size;
	}
	void travel() {
		int i = 0;
		printf(
				"============================================================================\n");
		printf("arr_Size:%d\n", arr_Size);
		for (; i < arr_Size; i++) {
			printf("%d\t", *(arr + i));
			if (i % 10 == 9) {
				printf("\n");
			}
		}
		printf("\n");
		printf(
				"============================================================================\n");
	}

	int get(int index) {
		return *(arr + index);
	}
	int remove(int index) {//要加一个index在0~arr_Size之间的判断,不在就是越界,return -1
		for (int i = index; i < arr_Size; i++) {
			if(index == arr_Size){
				*(arr+arr_Size)='\0';
			}
			*(arr+i)=*(arr+i+1);
		}
		arr_Size--;
		printf("It is successful to remove!\n");
		return 1;
	}
private:
	int len;
	int arr_Size;
	int* arr;

	void arr_Expansion() {
		int* arr1 = arr;
		len += 10;
		arr = new int[len];
		for (int i = 0; i < len; i++) {
			*(arr + i) = *(arr1 + i);
		}
		delete[] arr1;
		printf("No.%d\tarr.addr=%p\n", count++, arr);
	}
};

int main() {
	ArrayList list;
	for (int i = 1; i <= 35; i++) {
		list.add(i);
	}
	list.travel();
	int index;
	printf("index:");
	scanf("%d", &index);
	printf("list[%d]=%d\n", index, list.get(index));
	
	printf("index to remove:");
	scanf("%d", &index);
	list.remove(index);
	list.travel();
}

运算结果(Eclipse):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值