【笔记】 C++ 动态数组(Dynamic array)

一维

类的头文件:

#pragma once
#define _HEAP_VECTOR_

template<typename ValueType>
class Heap_Vector {
public:
	Heap_Vector(size_t n = 32) :capacity(n), content_number(0), vec(new ValueType[n]) {}
	~Heap_Vector() // destructor
	{
		delete[] vec; // free the dynamic array
	}
	// similar to the function of push_back in vector
	void push_back(ValueType value)
	{
		if (content_number == capacity)
		{
			expand();
		}
		vec[content_number++] = value;
	}
	ValueType operator [](size_t index)
	{
		return vec[index];
	}
	size_t size()
	{
		return content_number;
	}
private:
	ValueType* vec;
	size_t capacity;
	size_t content_number;
	void expand()
	{
		// 1. ask for new space for the array
		ValueType* new_vec = new ValueType[2 * capacity];
		// 2. copy the values over
		for (size_t i = 0; i != content_number; i++)
			new_vec[i] = vec[i];
		// 3. delete the old array
		delete[] vec;
		// 4. point vec to new array
		vec = new_vec;
		// 5. update capacity (twice the capacity)
		capacity *= 2;
	}
};

// ALL RIGHTS RESERVED (C) 2020 Teddy van Jerry

一维动态数组的申请:

ValueType vec = new ValueType[n];

一维动态数组的释放:

delete[] vec;

一维动态数组的增长:(此处是将长度乘二)

	void expand()
	{
		// 1. ask for new space for the array
		ValueType* new_vec = new ValueType[2 * capacity];
		// 2. copy the values over
		for (size_t i = 0; i != content_number; i++)
			new_vec[i] = vec[i];
		// 3. delete the old array
		delete[] vec;
		// 4. point vec to new array
		vec = new_vec;
		// 5. update capacity (twice the capacity)
		capacity *= 2;
	}

二维

二维动态数组的申请:

	int** bucket = new int* [radix_index]; // define a dynamic array of arrays
	for (int i = 0; i != radix_index; i++)
		bucket[i] = new int[vint.size()]; // define a dynamic array

(注意:radix_index必须是const
二维动态数组的释放:

	for (int i = 0; i != radix_index; i++)
		delete[] bucket[i]; // free the dynamic arrays

运用实例

【SEU程序设计课笔记】 12 - 2020/11/19 - Write C++ programs - 排序


ALL RIGHTS RESERVED © 2020 Teddy van Jerry
欢迎转载,转载请注明出处。


See also

Teddy van Jerry 的导航页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值