📜  C ++ |模板|问题9(1)

📅  最后修改于: 2023-12-03 14:59:36.841000             🧑  作者: Mango

C++ | 模板 | 问题9

在C++编程中,模板是一种使代码更加通用和可重用的强大工具。通过使用模板,程序员可以编写与数据类型无关的代码,这意味着可以使用相同的代码来处理不同类型的数据。

在本问题中,我们将讨论C++中的模板,并解决一个与模板相关的问题。

问题

在C++程序中,我想要创建一个可以容纳不同类型数据的动态数组。我希望能够使用以下操作进行操作:

  • 向数组中添加元素
  • 获取数组的大小
  • 访问特定索引的元素

请问,如何使用模板来实现这个动态数组,并满足我所需的操作?

解决方案
#include <iostream>
#include <stdexcept>

template <class T>
class DynamicArray {
private:
    T* data;
    int size;
    int capacity;

public:
    DynamicArray() {
        size = 0;
        capacity = 10;
        data = new T[capacity];
    }

    ~DynamicArray() {
        delete[] data;
    }

    void push_back(T element) {
        if (size == capacity) {
            // 容量已满,需要扩展数组
            resize();
        }

        data[size++] = element;
    }

    int getSize() const {
        return size;
    }

    T& operator[](int index) const {
        if (index < 0 || index >= size) {
            throw std::out_of_range("Index out of range");
        }

        return data[index];
    }

private:
    void resize() {
        capacity *= 2;
        T* newData = new T[capacity];

        for (int i = 0; i < size; ++i) {
            newData[i] = data[i];
        }

        delete[] data;
        data = newData;
    }
};

int main() {
    // 使用示例
    DynamicArray<int> myArray;

    myArray.push_back(10);
    myArray.push_back(20);
    myArray.push_back(30);

    std::cout << "Array size: " << myArray.getSize() << std::endl;
    std::cout << "Element at index 1: " << myArray[1] << std::endl;

    return 0;
}

请注意,上述代码使用了C++的模板来定义了一个DynamicArray类。该类具有一个私有成员data表示数组中的数据,size表示当前数组的大小,capacity表示数组的总容量。类的公共成员函数包括:

  • 构造函数:初始化数组的大小、容量和分配内存
  • 析构函数:释放内存
  • push_back函数:将新元素添加到数组中。如果数组已满,则会自动扩展数组的容量。
  • getSize函数:返回数组的大小。
  • 重载[]运算符:用于访问数组中的特定索引的元素。

main函数中,我们创建了一个DynamicArray对象,并演示了如何使用该数组。首先,我们使用push_back函数向数组中添加了几个元素。然后,通过getSize函数获取数组的大小。最后,通过重载的[]运算符访问了特定索引处的元素。

希望这个解决方案能够帮助你实现你所需的功能!通过使用模板,你可以轻松地创建一个通用的动态数组,用于存储不同类型的数据。这将极大地提高你的代码的重用性和灵活性。