Bladeren bron

V1.1.3
1、修改了环形队列

Apple 1 week geleden
bovenliggende
commit
132adae1e5
1 gewijzigde bestanden met toevoegingen van 30 en 4 verwijderingen
  1. 30 4
      module/RingQueue/RingQueueManualMutex.hpp

+ 30 - 4
module/RingQueue/RingQueueManualMutex.hpp

@@ -64,7 +64,11 @@ public:
 
 
     /* 获取对立第一个数据,获取完立刻出队
     /* 获取对立第一个数据,获取完立刻出队
      * 如果删除了拷贝构造函数,使用会报错 */
      * 如果删除了拷贝构造函数,使用会报错 */
-    T&& front_pop();
+    T front_pop();
+
+    /* 获取最后一个值,最后一个值不会出队 */
+    T back();
+    bool back(T& value);
 
 
     /* 根据下标获取某个位置的元素,下标0就是下一个要出队的位置
     /* 根据下标获取某个位置的元素,下标0就是下一个要出队的位置
      * 这里获取元素不会出队 */
      * 这里获取元素不会出队 */
@@ -92,7 +96,7 @@ private:
     /* 判断是否空 */
     /* 判断是否空 */
     inline bool _isEmpty() const;
     inline bool _isEmpty() const;
     /* 判断是否满 */
     /* 判断是否满 */
-    inline bool _isFull();
+    inline bool _isFull() const;
 
 
 private:    
 private:    
     T m_defaultValue;                           /* 默认值 */
     T m_defaultValue;                           /* 默认值 */
@@ -267,7 +271,7 @@ T RingQueueManualMutex<T>::front()
 
 
 /* 获取对立第一个数据,获取完立刻出队 */
 /* 获取对立第一个数据,获取完立刻出队 */
 template<typename T>
 template<typename T>
-T&& RingQueueManualMutex<T>::front_pop()
+T RingQueueManualMutex<T>::front_pop()
 {
 {
     if(_isEmpty())
     if(_isEmpty())
     {
     {
@@ -285,6 +289,28 @@ T&& RingQueueManualMutex<T>::front_pop()
     return std::move(ret);
     return std::move(ret);
 }
 }
 
 
+/* 获取最后一个值,最后一个值不会出队 */
+template<typename T>
+T RingQueueManualMutex<T>::back()
+{
+    if(_isEmpty())
+    {
+        return _DefaultValue; // 如果队列为空,返回默认值
+    }
+    return m_queue[(m_rear - 1 + m_capacity) % m_capacity];
+}
+
+template<typename T>
+bool RingQueueManualMutex<T>::back(T& value)
+{
+    if(_isEmpty())
+    {
+        return false;
+    }
+    value = m_queue[(m_rear - 1 + m_capacity) % m_capacity];
+    return true;
+}
+
 /* 根据下标获取某个位置的元素,下标0就是下一个要出队的位置
 /* 根据下标获取某个位置的元素,下标0就是下一个要出队的位置
  * 这里获取元素不会出队 */
  * 这里获取元素不会出队 */
 template<typename T>
 template<typename T>
@@ -441,7 +467,7 @@ bool RingQueueManualMutex<T>::_isEmpty() const
 
 
 /* 判断是否满 */
 /* 判断是否满 */
 template<typename T>
 template<typename T>
-inline bool RingQueueManualMutex<T>::_isFull()
+inline bool RingQueueManualMutex<T>::_isFull() const
 {
 {
     /* 如果m_rear或者m_front不等于-1,说明此时里面有内容
     /* 如果m_rear或者m_front不等于-1,说明此时里面有内容
      * 同时m_front == m_rear,队列就满了 */
      * 同时m_front == m_rear,队列就满了 */