원형큐입니다.
#pragma once
#include <iostream>
#include <array>
template <typename t_type, int t_size>
class circular_queue
{
private:
/*
use modulo operation to check bound
so, add one more space in container
*/
std::array<t_type, t_size + 1> container;
public:
int front;
int rear;
circular_queue()
: front(0), rear(0), container()
{
}
~circular_queue()
{
}
void enqueue(t_type element)
{
if(!full())
{
container[rear] = element;
rear = (rear + 1) % container.size();
}
}
t_type dequeue()
{
if(!empty())
{
int temp_pos = front;
front = (front + 1) % container.size();
return container[temp_pos];
}
}
bool empty()
{
return front == rear;
}
bool full()
{
return ((rear + 1) % container.size()) == front;
}
size_t size()
{
/*
return size with -1 because container size added one more
*/
return container.size() -1;
}
std::array<t_type, t_size + 1> getArray()
{
return container;
}
};
'C.C++ > 코드' 카테고리의 다른 글
case에 해싱을 통해 string으로 처리하는 것 실제 사용 예 (0) | 2018.05.06 |
---|---|
thread_group (1) | 2018.04.24 |
asio 타이머 핸들링 예제 (2) | 2018.04.17 |
asio io_service 한방이해 (0) | 2018.04.15 |
예외처리가 안되었을 경우에 terminate 에서 abort 말고 커스텀 함수 호출하는 법 (0) | 2017.12.10 |
댓글