БлогNot. QT: делаем кольцевой буфер

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

QT: делаем кольцевой буфер

В библиотеке Tulip, как и в stl, есть практически все нужные контейнеры для реализации типовых динамических структур данных. Конечно, иногда приходится изменять или расширять функционал контейнера, и самый естественный путь сделать это - написать класс-потомок, модифицирующий или дополняющий базовый функционал класса-родителя.

В качестве примера сделаем из стандартной очереди QQueue кольцевой буфер CQueue, отличающийся тем, что ёмкость очереди ограничена заданным натуральным значением count. Если при добавлении элементов предельная ёмкость превышена, из буфера удаляется самый старый элемент.

Чтобы решение было достаточно универсальным, реализуем шаблон класса CQueue, полный исходник с комментариями - ниже:

#include <QCoreApplication>
#include <QQueue>
#include <QDebug>
#include <iostream>
using namespace std;

//Кольцевой буфер на основе стандартной очереди
template <class T>
class CQueue : public QQueue <T> {
 //как наследоваться от стандартного контейнера
 //для любого типа данных T
 private:
  int count; //предельный размер
 public:
  inline CQueue (int cnt) : QQueue<T>(),count(cnt) {
   //конструктор
  }
  inline void enqueue (const T &t) {
   //перегрузка метода постановки в очередь
   if (count==QQueue<T>::count()) {
    QQueue<T>::dequeue();
    //удалить старейший элемент по заполнении
   }
   QQueue<T>::enqueue(t);
  }
};

int main() {
 const int size=5; //размер буфера
 CQueue <int> q(size);
 for (int i=0; i<2*size; i++) q.enqueue(i+1);
  //заносим в буфер вдвое больше элементов,
  //чем он вмещает
 qDebug() << "Size=" << q.size();
 for (int i=0; i<size; i++) qDebug() << q.dequeue();
  //осталась только последняя половина элементов
 cin.sync(); cin.get(); return 0;
}

Как видно из кода, нам пришлось модифицировать только конструктор и метод постановки в очередь родительского класса.


теги: алгоритм c++ список qt

25.03.2016, 14:40; рейтинг: 5644

  свежие записипоиск по блогукомментариистатистикао "вирусах" в архивах .zip

Наверх Яндекс.Метрика
© PerS
вход