more sensible list

This commit is contained in:
2023-10-22 18:46:46 +02:00
parent a7cf6d5b7b
commit c1f2c1504a
2 changed files with 28 additions and 1 deletions

View File

@@ -13,17 +13,23 @@
template<typename T>
class ListQueue {
private:
public:
struct Node {
T val;
Node *next;
};
private:
Node *head = nullptr;
Node *tail = nullptr;
public:
ListQueue() = default;
~ListQueue() {
while (!empty()) {
pop_back();
}
}
template<class... Args>
void emplace_front(Args &&...args) {
@@ -62,6 +68,21 @@ public:
delete old_tail;
}
Node *extract_back() {
if (!head) return nullptr;
if (tail == head) {
auto b = tail;
tail = nullptr;
head = nullptr;
return b;
}
auto old_tail = tail;
tail = tail->next;
return old_tail;
}
bool empty() {
assert((tail == nullptr) == (head == nullptr));
return head == nullptr;

View File

@@ -35,6 +35,12 @@ public:
T &operator*() const { return *ptr; }
T *get() const noexcept { return ptr; }
T *release() noexcept {
auto b = ptr;
ptr = nullptr;
return b;
}
private:
T *ptr = nullptr;