91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

C++循環隊列的迭代器設計

c++
小樊
82
2024-07-14 10:22:30
欄目: 編程語言

循環隊列是一種特殊的隊列數據結構,它具有固定大小的緩沖區,并且在尾部插入元素時會循環回到緩沖區的起始位置。在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方法返回隊列的起始和結束迭代器,可以使用標準庫的循環語句對隊列進行遍歷。

這種設計模式可以使循環隊列的迭代器更加靈活和易于使用,方便對隊列中的元素進行訪問和操作。

0
青神县| 万盛区| 临湘市| 金沙县| 汉源县| 资源县| 新余市| 阜城县| 潮州市| 无为县| 木里| 浮梁县| 肥乡县| 盐津县| 晋江市| 沙湾县| 岱山县| 申扎县| 阿克| 溧水县| 饶平县| 九寨沟县| 东乌珠穆沁旗| 金堂县| 横山县| 满城县| 高淳县| 洞头县| 霍林郭勒市| 海阳市| 东港市| 萝北县| 遵化市| 昂仁县| 苍溪县| 蕲春县| 兴和县| 永胜县| 荥阳市| 佛学| 龙山县|