类模板(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
欢迎转载,转载请注明出处。