循环队列(circular queue)

来源:互联网 发布:hp打印机端口设置 编辑:程序博客网 时间:2024/05/10 18:56

  循环队列是非常有用的一个数据结构,在单读、单写入的情况下可以不必对共享的队列数据进行加锁,非常有利于提升并发的性能。下面是一个实例程序:

#include <vector>#include <stdio.h>template<typename T>class CircularQueue {public:  CircularQueue(const size_t& size) : size_(size + 1), read_index_(0), write_index_(0) {    data_.reserve(size_);  }  bool Push(const T& element) {    size_t next_index = (write_index_ + 1) % size_;    if (next_index == read_index_) {      return false;    } else {      data_[write_index_] = element;      write_index_ = next_index;    }  }  bool Pop(T* element) {    if (read_index_ == write_index_) {      return false;    } else {      *element = data_[read_index_];      read_index_ = (read_index_ + 1) % size_;    }  }private:  size_t read_index_;  size_t write_index_;  size_t size_;  std::vector<T> data_;};int main(int argc, char** argv) {  CircularQueue<int> circular_queue(100);  int index = 0;  while (circular_queue.Push(index)) {    printf("%d\n", index);    index++;  }  int value;  while (circular_queue.Pop(&value)) {    printf("--%d--\n", value);  }}

值得一提的是boost有circular buffer的实现
参考文献:
http://en.wikipedia.org/wiki/Circular_buffer#Record_last_operation
http://www.boost.org/doc/libs/1_39_0/libs/circular_buffer/doc/circular_buffer.html