//: C03:Sorted.h // From Thinking in C++, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 2000 // Copyright notice in Copyright.txt // Template specialization #ifndef SORTED_H #define SORTED_H #include template class Sorted : public std::vector { public: void sort(); }; template void Sorted::sort() { // A bubble sort for(int i = size(); i > 0; i--) for(int j = 1; j < i; j++) if(at(j-1) > at(j)) { // Swap the two elements: T t = at(j-1); at(j-1) = at(j); at(j) = t; } } // Partial specialization for pointers: template class Sorted : public std::vector { public: void sort(); }; template void Sorted::sort() { for(int i = size(); i > 0; i--) for(int j = 1; j < i; j++) if(*at(j-1) > *at(j)) { // Swap the two elements: T* t = at(j-1); at(j-1) = at(j); at(j) = t; } } // Full specialization for char*: template<> void Sorted::sort() { for(int i = size(); i > 0; i--) for(int j = 1; j < i; j++) if(strcmp(at(j-1), at(j)) > 0) { // Swap the two elements: char* t = at(j-1); at(j-1) = at(j); at(j) = t; } } #endif // SORTED_H ///:~