template <typename Object>
class Queue
{
private:
vector<Object> data;
int rear;
int head;
public:
Queue() : data(5), rear(0), head(0)
{
}
bool empty() const
{
return rear == head;
}
int size() const
{
return (rear - head + data.size()) % data.size();
}
Object& front()
{
return data[head];
}
const Object& front() const
{
return data[head];
}
Object& back()
{
return data[(rear - 1 + data.size()) % data.size()];
}
const Object& back() const
{
return data[(rear - 1 + data.size()) % data.size()];
}
void push(const Object& x)
{
if (size() == data.size() - 1)
{
int n = size();
Queue copy = *this;
Object temp;
for (int i = 0; i < size(); i++)
{
temp = copy.front();
copy.pop();
data[i] = temp;
}
head = 0, rear = n;
data.resize(size() + 100);
}
data[rear] = x;
rear = (rear + 1) % data.size();
}
void push(Object&& x)
{
if (size() == data.size() - 1) //队满
{
int n = size();
Queue copy = *this;
Object temp;
for (int i = 0; i < size(); i++) //重新调整队头和队尾指针。
{
temp = copy.front();
copy.pop();
data[i] = temp;
}
head = 0, rear = n;
data.resize(size() + 100);
}
data[rear] = std::move(x);
rear = (rear + 1) % data.size();
}
void pop()
{
head = (head + 1) % data.size();
}
void swap(Queue& rhs)
{
std::swap(head, rhs.head);
std::swap(rear, rhs.rear);
std::swap(data, rhs.data);
}
};
queue的vector实现(可动态增长)
最新推荐文章于 2024-02-09 16:53:30 发布