C++循环队列的迭代器设计

   2024-10-06 9180
核心提示:循环队列是一种特殊的队列数据结构,它具有固定大小的缓冲区,并且在尾部插入元素时会循环回到缓冲区的起始位置。在C++中,可以

循环队列是一种特殊的队列数据结构,它具有固定大小的缓冲区,并且在尾部插入元素时会循环回到缓冲区的起始位置。在C++中,可以通过自定义一个循环队列类来实现这种数据结构,同时为了支持迭代器访问循环队列中的元素,需要设计相应的迭代器类。

以下是一个简单的循环队列类及其迭代器类的设计示例:

#include <iostream>#include <vector>template <typename T>class CircularQueue {public:    CircularQueue(int size) : size_(size), front_(0), rear_(0), count_(0) {        buffer_.resize(size_);    }    void push(const T& value) {        if (isFull()) {            std::cerr << "Queue is full!" << std::endl;            return;        }        buffer_[rear_] = value;        rear_ = (rear_ + 1) % size_;        count_++;    }    T pop() {        if (isEmpty()) {            std::cerr << "Queue is empty!" << std::endl;            return T();        }        T value = buffer_[front_];        front_ = (front_ + 1) % size_;        count_--;        return value;    }    bool isEmpty() {        return count_ == 0;    }    bool isFull() {        return count_ == size_;    }    class Iterator {    public:        Iterator(CircularQueue& queue, int index) : queue_(queue), index_(index) {}        T& operator*() {            return queue_.buffer_[index_];        }        Iterator& operator++() {            index_ = (index_ + 1) % queue_.size_;            return *this;        }        bool operator!=(const Iterator& other) const {            return index_ != other.index_;        }    private:        CircularQueue& queue_;        int index_;    };    Iterator begin() {        return Iterator(*this, front_);    }    Iterator end() {        return Iterator(*this, rear_);    }private:    std::vector<T> buffer_;    int size_;    int front_;    int rear_;    int count_;};int main() {    CircularQueue<int> queue(5);    queue.push(1);    queue.push(2);    queue.push(3);    for (auto it = queue.begin(); it != queue.end(); ++it) {        std::cout << *it << " ";    }    std::cout << std::endl;    queue.pop();    for (auto it = queue.begin(); it != queue.end(); ++it) {        std::cout << *it << " ";    }    std::cout << std::endl;    return 0;}

在上面的示例中,CircularQueue类表示一个循环队列,包括push、pop、isEmpty等方法用于操作队列。迭代器类Iterator用于遍历队列中的元素,重载了*、++和!=操作符。通过begin和end方法返回队列的起始和结束迭代器,可以使用标准库的循环语句对队列进行遍历。

这种设计模式可以使循环队列的迭代器更加灵活和易于使用,方便对队列中的元素进行访问和操作。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号