具体要求: •定义顺序表类模板,并初始化实现一个空 int 型 顺序表; •实现顺序表的插入操作; •实现顺序表的按值查找操作; •实现顺序表的删除操作; • 基于顺序表,实现两个 int 型集合的并集操作。
时间: 2024-12-17 12:41:06 浏览: 10
在C++中,你可以定义一个模板类`SequenceList<int>`来表示整型的顺序列表。以下是基本实现:
```cpp
template <typename T>
class SequenceList {
private:
size_t capacity;
T* elements; // 存储元素的数组
public:
// 构造函数,创建一个空列表
SequenceList() : capacity(0), elements(nullptr) {}
// 插入操作,如果已满则扩容
void insert(const T& value) {
if (capacity == elements capacity) {
resize(capacity * 2);
}
elements[capacity++] = value;
}
// 按值查找操作,返回元素的位置(下标),未找到返回 -1
size_t find(const T& value) const {
for (size_t i = 0; i < capacity; ++i) {
if (elements[i] == value) {
return i;
}
}
return -1;
}
// 删除操作,移除指定位置的元素
void remove(size_t index) {
if (index >= 0 && index < capacity) {
for (size_t i = index; i < capacity - 1; ++i) {
elements[i] = elements[i + 1];
}
--capacity;
if (capacity == 0) {
delete[] elements;
elements = nullptr;
} else {
elements[capacity - 1] = T(); // 或者设置为默认值,防止内存泄露
}
}
}
// 并集操作,合并两个列表并将结果存储在当前列表中
void unionWith(const SequenceList<T>& other) {
size_t totalCapacity = capacity + other.capacity;
if (totalCapacity > capacity) {
resize(totalCapacity);
}
// 将this列表的元素复制到前面,然后添加other列表的元素
std::copy(elements, elements + capacity, elements);
std::copy(other.elements, other.elements + other.capacity, elements + capacity);
}
// 返回列表长度
size_t size() const { return capacity; }
private:
// 扩容数组
void resize(size_t newCapacity) {
T* newElements = new T[newCapacity];
if (elements != nullptr) {
std::copy(elements, elements + capacity, newElements);
delete[] elements;
}
elements = newElements;
capacity = newCapacity;
}
};
```
阅读全文