用c++编写一个集合类,用来处理一组相同数据类型的数据,要求是:1> 集合元素的数据类型可以是任意指定的类型;2>可以动态维护长度;编写代码验证该集合类。并做详细说明。
时间: 2024-05-16 12:13:29 浏览: 119
好的,下面是一个简单的集合类的实现,可以处理一组相同数据类型的数据,可以动态维护长度:
```c++
template <typename T>
class Set {
private:
T* data; // 存储数据的数组
int size; // 集合的长度
public:
Set() : data(nullptr), size(0) {} // 构造函数
~Set() { delete[] data; } // 析构函数
void add(T item) { // 添加元素
T* newData = new T[size + 1];
for (int i = 0; i < size; i++) {
newData[i] = data[i];
}
newData[size++] = item;
delete[] data;
data = newData;
}
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];
}
};
```
这个集合类使用模板(template)实现,可以处理任意指定类型的数据。其中,`data`成员变量是一个指向动态分配的T类型数组的指针,`size`成员变量记录了集合的长度。
该集合类提供了以下几个方法:
- 构造函数和析构函数:默认构造函数初始化`data`为空指针,`size`为0,析构函数释放`data`指向的内存。
- `add`方法:添加一个元素到集合中,先创建一个新的长度为`size+1`的数组,将原来的数据复制到新数组中,然后将新的元素添加到新数组的末尾,最后释放原来的数组并将`data`指向新数组。
- `getSize`方法:返回集合的长度。
- `operator[]`运算符:重载下标运算符,可以用来访问集合中的元素。
下面是一个示例代码,演示了如何使用该集合类:
```c++
#include <iostream>
#include <string>
#include "Set.h"
int main() {
Set<int> intSet;
intSet.add(1);
intSet.add(2);
intSet.add(3);
std::cout << "Size of intSet: " << intSet.getSize() << std::endl;
std::cout << "Elements of intSet: ";
for (int i = 0; i < intSet.getSize(); i++) {
std::cout << intSet[i] << " ";
}
std::cout << std::endl;
Set<std::string> strSet;
strSet.add("hello");
strSet.add("world");
std::cout << "Size of strSet: " << strSet.getSize() << std::endl;
std::cout << "Elements of strSet: ";
for (int i = 0; i < strSet.getSize(); i++) {
std::cout << strSet[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
在这个示例代码中,我们首先创建了两个不同类型的集合:一个存储整数,一个存储字符串。然后,我们向这两个集合中添加一些元素,并打印出它们的长度和元素。运行这个程序,输出如下:
```
Size of intSet: 3
Elements of intSet: 1 2 3
Size of strSet: 2
Elements of strSet: hello world
```
可以看到,集合类能够正确处理不同类型的数据,并且可以动态维护长度。
阅读全文