Untitled
unknown
c_cpp
a year ago
2.0 kB
8
Indexable
#ifndef QUEUE_H #define QUEUE_H #include <iostream> #include <vector> template <class T> class queue { public: queue(); typedef std::size_t size_type; void push(T); void pop(); T front() const; bool empty() const; size_type size() const; private: std::vector<T> _v; std::size_t _size; std::size_t _front; }; template <class T> queue<T>::queue(){ _v; _size = 0; _front = -1; } template <class T> bool queue<T>::empty() const{ return (_size == 0); } template <class T> void queue<T>::push(T elem){ //std::cout << "we are pushing\n"; if(_size == _v.size()){ //insufficient capacity if (_front!=0 && _front!=-1){ //it isn't an exact linear vector _v.push_back(0); // add a random element to back of vector for (int i = _size; i >= _front; i--){ // shift everything from front position to end one index rightwards _v[i] = _v[i-1]; } _v[_front] = elem; // equate what used to be front (and is now tail) to elem //std::cout << "element " << _front << "is now = " << elem << std::endl; _front++; } else{ //std::cout << "else entered\n"; _v.push_back(elem); //std::cout << "this is now the last element: " << _v[_v.size() - 1] << std::endl; //std::cout <<"elemnt zero is " << _v[0] << std::endl; if (_front == -1) _front = 0; } _size++; } else{ _v[(_front + _size)%_v.size()] = elem; _size++; //std::cout << "capacity not full\n"; } } template <class T> void queue<T>::pop(){ assert(!empty()); _size--; _front = (_front + 1)%_v.size(); } template <class T> T queue<T>::front() const{ return _v[_front]; } template <class T> typename queue<T>::size_type queue<T>::size() const{ return _size; } #endif // QUEUE_H
Editor is loading...
Leave a Comment