stl仿写队列
时间: 2023-07-09 20:17:46 浏览: 101
好的,以下是一个简单的STL仿写队列的示例代码:
```c++
#include <iostream>
#include <stdexcept>
using namespace std;
template<typename T>
class myQueue{
private:
struct Node {
T val;
Node *next;
Node(T val = 0, Node *next = nullptr) : val(val), next(next) {}
};
Node *head, *tail;
int size;
public:
myQueue() : head(nullptr), tail(nullptr), size(0) {}
~myQueue() {
while (head) {
Node *temp = head;
head = head->next;
delete temp;
}
}
bool empty() const {
return head == nullptr;
}
int getSize() const {
return size;
}
void push(T val) {
Node *temp = new Node(val, nullptr);
if (empty()) {
head = tail = temp;
} else {
tail->next = temp;
tail = temp;
}
size++;
}
void pop() {
if (empty()) {
throw out_of_range("queue is empty");
}
Node *temp = head;
head = head->next;
delete temp;
size--;
}
T front() const {
if (empty()) {
throw out_of_range("queue is empty");
}
return head->val;
}
T back() const {
if (empty()) {
throw out_of_range("queue is empty");
}
return tail->val;
}
};
int main() {
myQueue<int> q;
for (int i = 1; i <= 5; i++) {
q.push(i);
}
cout << "front: " << q.front() << endl;
cout << "back: " << q.back() << endl;
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}
cout << endl;
return 0;
}
```
这个队列使用了链表实现,其中每一个节点包含了一个数值和一个指向下一个节点的指针。队列的头部指向链表的第一个节点,队列的尾部指向链表的最后一个节点。在插入元素时,我们只需要创建一个新的节点并将其插入到链表的末尾即可。在弹出元素时,我们只需要将链表的头部指针指向下一个节点即可。
阅读全文