c++用类模板实现顺序表
时间: 2024-10-12 19:10:06 浏览: 43
《数据结构C++版》-顺序表实验-使用类模板的方式实现
在 C++ 中,类模板是一种通用的设计模式,它允许程序员创建一种可以处理不同类型数据的序列容器,比如顺序表。顺序表(Sequence Container)通常是线性的,元素按照插入的顺序存储。下面是一个简单的例子,展示了如何使用类模板 `template` 实现一个基本的动态数组顺序表:
```cpp
#include <iostream>
using namespace std;
// 定义一个模板类 SequenceList,存储任意类型的值
template <typename T>
class SequenceList {
public:
// 构造函数
SequenceList(size_t initial_capacity = 10) : capacity_(initial_capacity), data_(new T[capacity_]) {}
// 添加元素
void push_back(const T& value) {
if (size_ == capacity_) {
resize(capacity_ * 2); // 当满时,容量翻倍
}
data_[size_] = value;
size_++;
}
// 删除最后一个元素并返回
T pop_back() {
if (size_ > 0) {
T result = data_[size_ - 1] = T(); // 空出位置,方便后续删除操作
size_--;
if (size_ == 0) {
delete[] data_;
data_ = nullptr; // 如果列表为空,释放内存
} else {
resize(capacity_); // 只保留实际需要的空间
}
return result;
}
throw runtime_error("Empty list"); // 返回异常,当试图从空列表中弹出元素
}
private:
size_t size_; // 当前元素个数
size_t capacity_; // 最大容量
T* data_; // 存储元素的数组
// 动态扩容
void resize(size_t new_capacity) {
T* newData = new T[new_capacity];
for (size_t i = 0; i < size_; ++i) {
newData[i] = data_[i];
}
delete[] data_;
data_ = newData;
capacity_ = new_capacity;
}
};
int main() {
SequenceList<int> int_list;
int_list.push_back(5);
int_list.push_back(10);
cout << "List after adding: ";
for (const auto& element : int_list) {
cout << element << " ";
}
cout << endl;
cout << "Popped back value: " << int_list.pop_back() << endl;
return 0;
}
```
在这个例子中,`SequenceList` 类模板可以用于存储整数、浮点数或者其他任何支持复制构造的类型。
阅读全文