C++中的模板类是什么?

  • Post category:cplus

C++中的模板类是一种可以生成通用类型对象的类模板。模板类可以用来创建多种数据类型,其类型由一种或多种类型参数指定。它们在编写可重用和通用代码方面非常有用,因为它们可以在不重复编写代码的情况下支持多种数据类型。

下面是一个简单的示例:一个模板类Stack,该类用于存储任何数据类型的值,并允许使用压栈和弹出操作对其进行操作。

template <typename T>
class Stack {
    private:
        T* stackArray;  // 存储元素的数组
        int stackSize;  // 堆栈的大小
        int top;        // 栈顶元素的索引

    public:
        // 构造函数
        Stack(int size) {
            stackArray = new T[size];
            stackSize = size;
            top = -1;
        }

        // 压入栈顶
        void push(T value) {
            if(top == stackSize-1) {
                throw runtime_error("Stack is full");
            }

            top++;
            stackArray[top] = value;
        }

        // 弹出栈顶
        T pop() {
            if(top == -1) {
                throw runtime_error("Stack is empty");
            }

            T result = stackArray[top];
            top--;
            return result;
        }

        // 判断栈是否为空
        bool isEmpty() {
            return top == -1;
        }

        // 打印栈顶元素
        void printTop() {
            if(top == -1) {
                cout << "Stack is empty" << endl;
                return;
            }

            cout << "Top element is: " << stackArray[top] << endl;
        }

        // 析构函数
        ~Stack() {
            delete [] stackArray;
        }
};

在上面的代码中,我们使用了一个类型参数T,它可以用来指定元素类型。我们还定义了一个若干个函数用于执行常见的堆栈操作,包括push、pop、isEmpty等。

下面是一个用于演示的示例代码。我们将Stack类实例化为Stack类型,并使用push和pop将整数值添加到堆栈中,最后打印栈顶元素。

int main() {
    // 实例化一个Stack<int> 类型
    Stack<int> intStack(5);

    // 将数值1, 2, 3, 4, 5入栈
    for(int i=1; i<=5; i++) {
        intStack.push(i);
    }

    // 弹出栈顶元素,应该是数值5
    int popped = intStack.pop();
    cout << "Popped value: " << popped << endl;

    // 打印栈顶元素,应该是数值4
    intStack.printTop();

    // 将数值6入栈
    intStack.push(6);

    // 打印栈顶元素,应该是数值6
    intStack.printTop();

    return 0;
}

上面的示例演示了如何创建一个带有整数类型的Stack实例,但是我们也可以实例化Stack类来支持其他数据类型,例如:

Stack<double> doubleStack(10);  // 带有double类型的堆栈实例
Stack<string> stringStack(10);  // 带有字符串类型的堆栈实例

通过使用模板类,我们可以轻松地创建通用代码,以支持多种数据类型。