【C++】手动实现队列的封装(C++)
目录
源代码:
输出结果如下:
实现以下封装
源代码:
#include <iostream>
using namespace std;
class Queue
{
private:
int* arr; // 队列的动态数组
int front; // 队列头部元素的索引
int rear; // 队列尾部元素的索引
int capacity; // 队列的最大容量
public:
//有参构造函数
Queue(int size):front(0),rear(0),capacity(size)
{
arr = new int[capacity];
cout<<"有参构造函数"<<endl;
}
//析构函数
~Queue()
{
delete[] arr;
cout<<"析构函数"<<endl;
}
//赋值给容器适配器
Queue &operator=(const Queue &brr);
//访问第一个元素
int _front();
//访问最后一个元素
int _back();
//队列判空
bool _empty();
//返回容纳的元素数
int _size();
//向队尾插入元素
void _push(int value);
//删除首个元素
void _pop();
};
Queue &Queue::operator=(const Queue &brr)
{
if(this != &brr)
{
delete [] arr; //释放掉原先队列中的内存
front = brr.front;
rear = brr.rear;
capacity = brr.capacity;
arr = new int[capacity];
for(int i = 0; i < rear; i++)
{
arr[i] = brr.arr[i];
}
}
return *this;
cout<<"拷贝成功"<<endl;
}
int Queue::_front()
{
return arr[front];
}
int Queue::_back()
{
if(_empty())
{
cout<<"队列为空"<<endl;
return -1;
}
return arr[rear-1];
}
bool Queue::_empty()
{
return front == rear;
}
int Queue::_size()
{
return rear - front;
}
void Queue::_push(int value)
{
arr[rear++] = value;
cout<<value<<"尾插成功"<<endl;
}
void Queue::_pop()
{
if(_empty())
{
cout<<"队列为空"<<endl;
return ;
}
cout<<"首个元素"<<arr[front++]<<"删除成功\n"<<endl;
}
int main()
{
Queue q1(10); //分配了10个内存空间
q1._push(5); //尾插5
q1._push(2); //尾插2
q1._push(0); //尾插0
cout<<"最后一个元素是:"<<q1._back()<<endl; //访问最后一个元素
q1._pop(); //删除首个元素5
q1._pop(); //再次删除首个元素,这里就是2了
cout<<"此时第一个元素是:"<<q1._front()<<endl; //访问首个元素,就是0了
return 0;
}