|
@@ -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,队列就满了 */
|