【笔记】 C++ 模板(template)

类模板(class template)

#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(const ValueType& value)
	{
		if (content_number == capacity)
		{
			expand();
		}
		vec[content_number++] = value;
	}
	ValueType& operator [](const size_t& index)
	{
		return vec[index];
	}
	size_t size() const
	{
		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

简单来说,就是开始加上template这样一句,之后将类型改成template中缩写的(比如此处为ValueType)。

如果有成员函数是类外定义的,比如把push_back的定义放在外面:

template<typename ValueType>
void HeapVector::push_back(const ValueType& value)
{
	if (content_number == capacity)
	{
		expand();
	}
	vec[content_number++] = value;
}

函数模板

template <typename T>
void my_swap(T& a, T& b)
{
	T t = a;
	a = b;
	b = t;
}

函数模板的使用比类模板还要容易。


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


See also

Teddy van Jerry 的导航页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值