C++ 集合类实现:动态维护长度的通用数据集合
以下是一个简单的集合类的实现,其中使用了模板类和动态内存分配:
#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,它可以存储任意指定类型的数据。类中的私有成员变量data和size分别表示集合中的数据和集合的长度。在构造函数中,我们将data初始化为nullptr,size初始化为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 著作权归作者所有。请勿转载和采集!