|
@@ -4,7 +4,7 @@
|
|
|
#include <cstdlib>
|
|
|
#include <utility>
|
|
|
#include <mutex>
|
|
|
-#include <atomic>
|
|
|
+// #include <atomic>
|
|
|
|
|
|
/**
|
|
|
* @brief 这里采用零公摊的方式,设置多大的空间,就有多大的空间可以使用
|
|
@@ -34,9 +34,12 @@ class RingQueue
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
- RingQueue(long size = 1024);
|
|
|
+ RingQueue();
|
|
|
+ RingQueue(long size);
|
|
|
~RingQueue();
|
|
|
|
|
|
+ /* 设置队列大小 */
|
|
|
+ void setQueueSize(long size);
|
|
|
/* 入队 */
|
|
|
bool enQueue(const T& data);
|
|
|
bool enQueue(T&& data);
|
|
@@ -67,6 +70,13 @@ private:
|
|
|
* ***************************** 函数实现 *****************************
|
|
|
* ===================================================================== */
|
|
|
|
|
|
+/* 这个构造函数需要调用 setQueueSize 设置环形队列的大小 */
|
|
|
+template<typename T>
|
|
|
+RingQueue<T>::RingQueue() : m_capacity(0) , m_front(-1), m_rear(-1)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
template<typename T>
|
|
|
RingQueue<T>::RingQueue(long capacicy) : m_capacity(capacicy)
|
|
|
{
|
|
@@ -85,6 +95,29 @@ RingQueue<T>::~RingQueue()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * @brief 设置队列大小
|
|
|
+ * 注意:使用这个设置,如果队列中存储的是指针,指针的内存区域需要在调用这个函数之前释放,不然可能会造成
|
|
|
+ * 内存泄漏
|
|
|
+ *
|
|
|
+ * @tparam T
|
|
|
+ * @param size
|
|
|
+ */
|
|
|
+template<typename T>
|
|
|
+void RingQueue<T>::setQueueSize(long size)
|
|
|
+{
|
|
|
+ if(m_queue != nullptr)
|
|
|
+ {
|
|
|
+ delete[] m_queue;
|
|
|
+ m_queue = nullptr;
|
|
|
+ }
|
|
|
+
|
|
|
+ m_capacity = size;
|
|
|
+ m_front = -1;
|
|
|
+ m_rear = -1;
|
|
|
+ m_queue = new T[m_capacity];
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
/* 入队 */
|
|
|
template<typename T>
|