Mercurial > Algorithms__Sedgewick
diff algs4-c++/src/Deque.cpp @ 18:a149b424b4e2
Updated all template classes to have the implementaiton in the header file.
author | Eris Caffee <discordia@eldalin.com> |
---|---|
date | Sat, 20 Jun 2015 19:36:11 -0500 |
parents | 1e3c509b6ac4 |
children |
line diff
1.1 --- a/algs4-c++/src/Deque.cpp Fri Jun 19 18:18:47 2015 -0500 1.2 +++ b/algs4-c++/src/Deque.cpp Sat Jun 20 19:36:11 2015 -0500 1.3 @@ -1,170 +1,8 @@ 1.4 -// g++ -D DEQUE_MAIN -std=c++0x Deque.cpp 1.5 -// g++ -D DEQUE_MAIN -std=c++11 Deque.cpp 1.6 +// g++ -std=c++11 Deque.cpp 1.7 1.8 1.9 #include "Deque.hpp" 1.10 1.11 -#include <cassert> 1.12 -#include <cstddef> 1.13 - 1.14 -#include <iostream> 1.15 - 1.16 -template <typename T> 1.17 -Deque<T>::Deque( void ) : 1.18 - N (0), 1.19 - first (nullptr), 1.20 - last (nullptr) 1.21 - { 1.22 - } 1.23 - 1.24 -template <typename T> 1.25 -Deque<T>::~Deque( void ) { 1.26 - assert( N == 0 ); // Catch the potential memory leak. 1.27 - while ( first ) { 1.28 - Node *next = first->next; 1.29 - delete first; 1.30 - first = next; 1.31 - } 1.32 - } 1.33 - 1.34 -template <typename T> 1.35 -void Deque<T>::push_right( T &item ) { 1.36 - Node * node = new Node(); 1.37 - node->item = item; 1.38 - node->next = nullptr; 1.39 - node->prev = nullptr; 1.40 - 1.41 - if ( last ) { 1.42 - last->next = node; 1.43 - node->prev = last; 1.44 - last = node; 1.45 - } 1.46 - else { 1.47 - last = first = node; 1.48 - } 1.49 - 1.50 - N++; 1.51 - } 1.52 - 1.53 -template <typename T> 1.54 -void Deque<T>::push_left( T &item ) { 1.55 - Node * node = new Node(); 1.56 - node->item = item; 1.57 - node->next = nullptr; 1.58 - node->prev = nullptr; 1.59 - 1.60 - if ( first ) { 1.61 - node->next = first; 1.62 - first->prev = node; 1.63 - first = node; 1.64 - } 1.65 - else { 1.66 - last = first = node; 1.67 - } 1.68 - 1.69 - N++; 1.70 - } 1.71 - 1.72 -template <typename T> 1.73 -T Deque<T>::pop_left( void ) { 1.74 - assert( N > 0 ); 1.75 - 1.76 - T item = first->item; 1.77 - 1.78 - Node *old = first; 1.79 - if ( first->next ) 1.80 - first->next->prev = nullptr; 1.81 - first = first->next; 1.82 - delete old; 1.83 - N--; 1.84 - 1.85 - if ( ! first ) 1.86 - last = nullptr; 1.87 - 1.88 - return item; 1.89 - } 1.90 - 1.91 -template <typename T> 1.92 -T Deque<T>::pop_right( void ) { 1.93 - assert( N > 0 ); 1.94 - 1.95 - T item = last->item; 1.96 - 1.97 - Node *old = last; 1.98 - if ( last->prev ) 1.99 - last->prev->next = nullptr; 1.100 - last = last->prev; 1.101 - delete old; 1.102 - N--; 1.103 - 1.104 - if ( ! last ) 1.105 - first = nullptr; 1.106 - 1.107 - return item; 1.108 - } 1.109 - 1.110 -template <typename T> 1.111 -bool Deque<T>::is_empty( void ) { 1.112 - return N == 0; 1.113 - } 1.114 - 1.115 -template <typename T> 1.116 -size_t Deque<T>::size( void ) { 1.117 - return N; 1.118 - } 1.119 - 1.120 -template <typename T> 1.121 -typename Deque<T>::iterator Deque<T>::begin( void ) { 1.122 - return Deque<T>::iterator( first ); 1.123 - } 1.124 - 1.125 -template <typename T> 1.126 -typename Deque<T>::iterator Deque<T>::end( void ) { 1.127 - return Deque<T>::iterator( nullptr ); 1.128 - } 1.129 - 1.130 - 1.131 -//////////////////////////////////////////////////////////////////////////////// 1.132 - 1.133 -template <typename T> 1.134 -Deque<T>::iterator::iterator( Node *c ) : 1.135 - curr (c) 1.136 - { 1.137 - } 1.138 - 1.139 -template <typename T> 1.140 -typename Deque<T>::iterator & Deque<T>::iterator::operator++() { 1.141 - if ( this->curr != nullptr ) { 1.142 - this->curr = this->curr->next; 1.143 - } 1.144 - return *this; 1.145 - } 1.146 - 1.147 -template <typename T> 1.148 -typename Deque<T>::iterator Deque<T>::iterator::operator++( int ) { 1.149 - auto t = Deque<T>::iterator( *this ); 1.150 - 1.151 - if ( this->curr != nullptr ) { 1.152 - this->curr = this->curr->next; 1.153 - } 1.154 - return t; 1.155 - } 1.156 - 1.157 -template <typename T> 1.158 -T Deque<T>::iterator::operator*() { 1.159 - return this->curr->item; 1.160 - } 1.161 - 1.162 -template <typename T> 1.163 -bool Deque<T>::iterator::operator!=( typename Deque<T>::iterator other ) { 1.164 - return this->curr != other.curr; 1.165 - } 1.166 - 1.167 - 1.168 -//////////////////////////////////////////////////////////////////////////////// 1.169 - 1.170 -#ifdef DEQUE_MAIN 1.171 - 1.172 #include <iostream> 1.173 1.174 int main ( int argc, char **argv ) { 1.175 @@ -211,5 +49,3 @@ 1.176 std::cout << "Deque has " << deque.size() << " entries." << std::endl; 1.177 1.178 } 1.179 - 1.180 -#endif