Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- class Queue {
- public:
- Queue() : i_(0U), n_(n), queue_(new int[n_]) {}
- Queue(initializer_list<int> li)
- : i_(li.size()), n_(i_ + n), queue_(new int[n_]) {
- auto beg = queue_;
- for (auto x : li) *beg++ = x;
- }
- Queue(const Queue& q)
- : i_(q.i_), n_(q.n_), queue_(new int[n_]) {
- for (auto i = 0U; i < i_; ++i) queue_[i] = q.queue_[i];
- }
- Queue(Queue&& q) : i_(q.i_), n_(q.n_), queue_(move(q.queue_)) { }
- Queue& operator=(const Queue& q) {
- if (&q != this) {
- i_ = q.i_;
- n_ = q.n_;
- queue_ = new int[n_];
- for (auto i = 0U; i < i_; ++i) queue_[i] = q.queue_[i];
- }
- return *this;
- }
- Queue& operator=(Queue&& q) {
- i_ = q.i_;
- n_ = q.n_;
- queue_ = move(q.queue_);
- return *this;
- }
- ~Queue() {
- if (queue_ != nullptr) {
- delete[] queue_;
- queue_ = nullptr;
- }
- }
- void push(const int value) {
- if (i_ == n_) {
- n_ <<= 1;
- auto tmp = new int[n_];
- for (auto i = 0U; i < i_; ++i) tmp[i] = queue_[i];
- queue_ = move(tmp);
- }
- queue_[i_] = value;
- ++i_;
- }
- void pop() {
- if (i_ == 1U) i_ = 0U;
- else {
- for (auto i = 1U; i < i_; ++i) queue_[i - 1U] = queue_[i];
- --i_;
- }
- }
- int& front() { return *queue_; }
- int& back() { return *(queue_ + i_ - 1); }
- bool empty()const { return 0U == i_; }
- size_t size()const { return i_; }
- size_t capacity()const { return n_; }
- void clear() { i_ = 0U; }
- private:
- size_t i_;
- size_t n_;
- int* queue_;
- const static size_t n = 8U;
- };
- int main() {
- Queue queue({ 1, 2, 3, 4, 5, 6, 7, 8 });
- string ui[] = { "\n - size: ", "\n - capacity: ", "\n - front: ", "\n - back: " };
- cout << "\tbefore queue.pop():" << ui[0] << queue.size() << ui[1] << queue.capacity();
- if (!queue.empty()) cout << ui[2] << queue.front() << ui[3] << queue.back();
- if (!queue.empty()) queue.pop();
- cout << "\n\tafter queue.pop():" << ui[0] << queue.size() << ui[1] << queue.capacity();
- if (!queue.empty()) cout << ui[2] << queue.front() << ui[3] << queue.back();
- queue.push(1);
- cout << "\n\tafter queue.push(1):" << ui[0] << queue.size() << ui[1] << queue.capacity();
- if (!queue.empty()) cout << ui[2] << queue.front() << ui[3] << queue.back();
- for (auto x = 10; x < 20; ++x) queue.push(x);
- cout << "\n\tafter queue.push(...x):" << ui[0] << queue.size() << ui[1] << queue.capacity();
- if (!queue.empty()) cout << ui[2] << queue.front() << ui[3] << queue.back();
- cout.put('\n');
- cin.get();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement