循环动态数组demo
时间: 2024-07-15 20:00:16 浏览: 58
循环动态数组(Circular Dynamic Array)是一种特殊的动态数组实现,它在数组的尾部和头部之间建立了一种循环关联,使得插入和删除元素时,不需要像普通数组那样移动大量的元素。这样可以提高在频繁添加或删除元素的场景下的性能。
以下是一个简单的循环动态数组的C++代码示例:
```cpp
template <typename T>
class CircularDynamicArray {
private:
T* array; // 存储数据的指针
size_t capacity; // 容量
size_t head; // 首元素索引,指向当前有效元素
size_t tail; // 尾元素索引
public:
CircularDynamicArray(size_t initial_capacity = 0) :
array(new T[initial_capacity]),
capacity(initial_capacity),
head(0),
tail(0) {}
~CircularDynamicArray() { delete[] array; } // 析构函数释放内存
void resize(size_t new_capacity) {
if (new_capacity < capacity) {
return; // 如果新容量小于当前,不做操作
}
T* newArray = new T[new_capacity];
for (size_t i = 0; i <= tail; ++i) {
newArray[i % new_capacity] = array[(head + i) % capacity];
}
delete[] array;
array = newArray;
capacity = new_capacity;
}
void push_back(const T& value) {
if (tail == capacity - 1) {
resize(capacity * 2); // 当尾部接近容量时,扩容一倍
}
array[tail] = value;
tail = (tail + 1) % capacity; // 循环更新尾部
}
// 其他方法,如push_front, pop_back等
};
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)