以下是一个简单的集合类的实现,其中使用了模板类和动态内存分配:

#include <iostream>
using namespace std;

template <typename T>
class Set {
private:
    T* data;
    int size;
public:
    Set(): data(nullptr), size(0) {}
    ~Set() {delete [] data;}
    void add(T item) {
        T* temp = new T[size + 1];
        for (int i = 0; i < size; i++) {
            temp[i] = data[i];
        }
        temp[size] = item;
        delete [] data;
        data = temp;
        size++;
    }
    void remove(T item) {
        int index = -1;
        for (int i = 0; i < size; i++) {
            if (data[i] == item) {
                index = i;
                break;
            }
        }
        if (index == -1) {
            return;
        }
        T* temp = new T[size - 1];
        for (int i = 0; i < index; i++) {
            temp[i] = data[i];
        }
        for (int i = index; i < size - 1; i++) {
            temp[i] = data[i + 1];
        }
        delete [] data;
        data = temp;
        size--;
    }
    int getSize() const {return size;}
    void print() const {
        for (int i = 0; i < size; i++) {
            cout << data[i] << ' '; // 将双引号改为单引号
        }
        cout << endl;
    }
};

int main() {
    Set<int> s;
    s.add(1);
    s.add(2);
    s.add(3);
    s.print(); // 输出:1 2 3
    s.remove(2);
    s.print(); // 输出:1 3
    cout << "Size: " << s.getSize() << endl; // 输出:Size: 2
    return 0;
}

在上面的代码中,我们定义了一个模板类Set,它可以存储任意指定类型的数据。类中的私有成员变量datasize分别表示集合中的数据和集合的长度。在构造函数中,我们将data初始化为nullptrsize初始化为0。add函数用于向集合中添加一个元素,它首先创建一个新的大小为size+1的数组temp,将原来的数据复制到temp中,再将新的元素添加到temp的最后面,最后将原来的数组data删除并将data指向temp,同时将size加1。remove函数用于从集合中删除一个元素,它首先遍历数组找到要删除的元素的下标,然后创建一个新的大小为size-1的数组temp,将原来的数据复制到temp中,但是跳过要删除的元素,最后将原来的数组data删除并将data指向temp,同时将size减1。getSize函数返回集合的大小。print函数用于打印集合中的元素。在main函数中,我们创建了一个Set对象s,并向其中添加了三个整数,然后打印集合中的元素,再删除一个元素并打印集合中的元素,最后输出集合的大小。


原文地址: https://www.cveoy.top/t/topic/nXhW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录