2.2 线性表的顺序表示
2.2.1 顺序表的定义

线性表中元素的位序是从 1 开始的,而数组中元素下标是从 0 开始的。
实现 vector
template<typename T>
class Vector {
private:
T *data; // 存储数据的指针
int size; // 当前元素个数
int capacity; // 当前容量
public:
// 构造函数
Vector() {
data = nullptr;
size = 0;
capacity = 0;
}
// 析构函数
~Vector() {
delete[] data;
}
// 获取当前元素个数
int getSize() const {
return size;
}
// 获取当前容量
int getCapacity() const {
return capacity;
}
// 判断是否为空
bool isEmpty() const {
return size == 0;
}
// 向 vector 末尾添加一个元素
void pushBack(T element) {
insert(size, element);
}
// 在指定位置插入一个元素
void insert(int index, T element) {
if (index < 0 || index > size) {
throw std::out_of_range("Index out of range");
}
if (size == capacity) {
reserve(capacity == 0 ? 1 : capacity * 2);
}
for (int i = size - 1; i >= index; i--) {
data[i + 1] = data[i];
}
data[index] = element;
size++;
}
// 删除指定位置的元素
void remove(int index) {
if (index < 0 || index >= size) {
throw std::out_of_range("Index out of range");
}
for (int i = index; i < size - 1; i++) {
data[i] = data[i + 1];
}
size--;
}
// 获取指定位置的元素
T get(int index) const {
if (index < 0 || index >= size) {
throw std::out_of_range("Index out of range");
}
return data[index];
}
// 修改指定位置的元素
void set(int index, T element) {
if (index < 0 || index >= size) {
throw std::out_of_range("Index out of range");
}
data[index] = element;
}
// 扩容
void reserve(int newCapacity) {
if (newCapacity <= capacity) {
return;
}
T *newData = new T[newCapacity];
for (int i = 0; i < size; i++) {
newData[i] = data[i];
}
delete[] data;
data = newData;
capacity = newCapacity;
}
};