/* *
* 模板类: 栈结构[借助数组实现]
*/
template<typename T>
class Stack {
private:
T *data; /* 数组第一个元素地址,存放T类型数组元素 */
int size; /* 当前栈实际填充数量 */
int capacity; /* 最大装载量 */
public:
Stack(int m_capacity) : size(0), capacity(m_capacity) {/* 类构造函数初始化列表进行初始化变量, 降低拷贝赋值次数 */
zz_log("Stack constructor");
data = new T[capacity];
zz_log("Stack capacity: %d, memory size: %u bytes", capacity, capacity * sizeof(T));
}
void push(T elem) {
if (size > capacity - 1) {
zz_log("Stack overflow");
return;
}
zz_log("Statck push [%d] elem", size);
data[size++] = elem;
}
T pop() {
zz_log("Stack pop [%d] elem", size - 1);
return data[--size]; /* 左减减,是由于在push操作后,size进行了自增1, 为下次数据填充做准备。所以要pop时,要先向前移动一位,才是最后一位 */
}
int empty() {
zz_log("Stack current elem count: %d", size);
return size;
}
~Stack() {
zz_log("Stack destructor");
delete[] data; /* data指针所指向的内存,使用delete[]运算符释放。 */
data = NULL;
}
};
void test_stack()
{
zz_log("test_statck run");
Stack<int> s(2);
s.push(1);
s.push(2);
s.push(3);
zz_log("pop top elem from stack: [%d]", s.pop());
}
int main()
{
test_stack();
return 0;
}
知识点:
在C++中,可以使用模板类来定义通用的数据结构或算法,以适应不同类型的数据。下面是定义一个模板类的基本语法:
template <typename T>
class ClassName {
// 类的成员和方法
};
在上面的代码中,template <typename T>
表示这是一个模板类的声明,T
是一个占位符类型,可以在类中使用。你可以根据需要选择其他的占位符名称,比如使用 class
关键字代替 typename
。
在模板类的定义中,你可以使用 T
作为类型参数来定义类的成员变量、成员函数和构造函数。例如:
template <typename T>
class Stack {
private:
T* data;
int size;
public:
Stack(int capacity) {
data = new T[capacity];
size = 0;
}
void push(T element) {
data[size++] = element;
}
T pop() {
return data[--size];
}
};
上面的代码定义了一个模板类 Stack
,用于表示一个栈数据结构。T
是栈中元素的类型,可以是任意类型。在构造函数、push
和 pop
方法中,可以使用 T
来声明变量和参数的类型。
使用模板类时,你可以根据需要指定具体的类型参数。例如:
Stack<int> intStack(10); // 创建一个存储整数的栈
intStack.push(5);
intStack.push(10);
int poppedInt = intStack.pop();
Stack<double> doubleStack(10); // 创建一个存储浮点数的栈
doubleStack.push(3.14);
doubleStack.push(2.718);
double poppedDouble = doubleStack.pop();
上面的代码分别创建了一个存储整数和浮点数的栈,并进行了一些操作。文章来源:https://www.toymoban.com/news/detail-662512.html
通过使用模板类,你可以在不同的类型上重用相同的代码,提高代码的复用性和灵活性。文章来源地址https://www.toymoban.com/news/detail-662512.html
到了这里,关于【C/C++】实现模板类数据结构 -- 栈 (亲测可用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!