类和对象代码实例
class Queue {
private:
int* _pQue;
int _front;
int _rear;
int _size;
public:
Queue(int size = 5) {
cout << "构造" << endl;
_size = size;
_pQue = new int[size];
_front = _rear = 0;
}
~Queue() {
cout << "析构" << endl;
delete[]_pQue;
_pQue = nullptr;
}
Queue(const Queue& src) {
cout << "拷贝构造" << endl;
if (&src == this) {
return;
}
//深拷贝
delete[]_pQue;
_pQue = new int[src._size];
_size = src._size;
_front = src._front;
_rear = src._rear;
for (int i = _front; i != _rear; i = (i + 1) % _size) {
_pQue[i] = src._pQue[i];
}
}
void push(int val) {
if (full()) {
resize();
}
_pQue[_rear] = val;
_rear = (_rear + 1) % _size;
}
void pop() {
if (empty()) {
return;
}
cout << _pQue[_front] << endl;
_front = (_front + 1) % _size;
}
int full() {
return _front == (_rear + 1) % _size;
}
int empty() {
return _rear == _front;
}
int top() {
return _pQue[_front];
}
void resize() {
int* newqueue = new int[2 * _size];
int index = 0;
for (int i = _front; i != _rear; i = (i + 1) % _size) {
newqueue[index++] = _pQue[i];
}
delete[]_pQue;
_pQue = newqueue;
_front = 0;
_rear = index;
_size *= 2;
}
};
int main() {
Queue qq;
for (int i = 0; i < 20; i++) {
qq.push(rand() % 100);
}
Queue pp = qq;
while (!qq.empty()) {
qq.pop();
}
while (!pp.empty()) {
pp.pop();
}
return 0;
}