如何用C++实现顺序表的动态扩容操作,并保持原有元素的正确位置?
时间: 2024-09-21 09:05:46 浏览: 60
shunxubiao.rar_K3W_devc++shunxubiao_顺序表的基本操作
在C++中,实现顺序表的动态扩容通常涉及到两个步骤:创建新的存储空间并复制原有元素。这里是一个简单的示例:
1. 首先,定义一个动态数组模板,用于存储数据:
```cpp
template <typename T>
class DynamicList {
private:
T* elements; // 存储元素的指针
std::size_t size; // 当前元素数量
std::size_t capacity; // 容量
public:
DynamicList() : elements(nullptr), size(0), capacity(0) {}
~DynamicList() { delete[] elements; } // 析构函数释放内存
void resize(size_t newSize) {
if (newSize <= capacity) return;
T* newElements = new T[newSize]; // 创建新数组
for (std::size_t i = 0; i < size; ++i)
newElements[i] = elements[i]; // 复制旧元素到新数组
delete[] elements;
elements = newElements;
capacity = newSize;
}
// 其他列表操作...
};
```
在这个`resize()`函数中,如果需要扩容,我们首先检查新大小是否超过当前容量。如果是,我们创建一个新的更大尺寸的动态数组,然后遍历原数组将每个元素复制到新数组对应的位置。最后,释放旧数组的内存,并更新指向新数组的指针以及容量。
阅读全文