用C++的类模版写一个顺序表的框架
时间: 2024-10-21 19:03:52 浏览: 25
在C++中,我们可以使用类模板来创建一个通用的顺序表框架。这里是一个简单的例子,它定义了一个模板类`SequenceList`,用于存储任意类型的元素:
```cpp
template <typename T>
class SequenceList {
private:
size_t capacity; // 存储容量
size_t size; // 当前元素个数
T* elements; // 存储数据的数组
public:
// 构造函数,初始化列表为空
SequenceList() : capacity(0), size(0), elements(new T[capacity]) {}
// 析构函数,释放内存
~SequenceList() {
delete[] elements;
}
// 添加元素到列表尾部,自动扩容
void push_back(const T& value) {
if (size == capacity) {
resize(capacity * 2);
}
elements[size++] = value;
}
// 获取指定索引的元素
const T& get(size_t index) const {
if (index >= size || index < 0) {
throw std::out_of_range("Index out of range");
}
return elements[index];
}
// 删除指定索引的元素并调整大小
void remove_at(size_t index) {
if (index >= size || index < 0) {
throw std::out_of_range("Index out of range");
}
for (size_t i = index; i < size - 1; ++i) {
elements[i] = elements[i + 1];
}
--size;
if (size < capacity / 4) {
resize(capacity / 2);
}
}
// 返回序列的大小
size_t size() const {
return size;
}
private:
// 动态调整容量
void resize(size_t new_capacity) {
T* new_elements = new T[new_capacity];
for (size_t i = 0; i < size; ++i) {
new_elements[i] = elements[i];
}
delete[] elements;
elements = new_elements;
capacity = new_capacity;
}
// 禁止复制构造和赋值运算符,防止意外拷贝
SequenceList(const SequenceList&) = delete;
SequenceList& operator=(const SequenceList&) = delete;
};
```
阅读全文