// lab06.cpp (c) 2000 adolfo@di-mare.com /** \file lab06.cpp \brief Ejemplo de una clase que mantiene un vector ordenado. \author Adolfo Di Mare \date 2000 */ #include // #include #include /// Clase para mantener un vector de valores enteros ordenados. class ord_int { public: ord_int() : m_n(0) {} ///< Constructor de vector ord_int(const ord_int& o); ///< Constructor de copia ord_int& operator=(ord_int& o); ///< Copia // métodos enum { Mx = 5 ///< Capacidad máxima del vector }; /// Retorna \c true cuando ya no le cabe ningún valor más al vector. bool lleno() const { return m_n >= Mx; } /// Agrega una copia de \c "v" al vector. void agregue(int v) { m_v[m_n++] = v; reordene(); } /// Retorna la cantidad de valores almacenados en el vector. unsigned cardinalidad() const { return m_n; } // Retorna una referencia a \c V[n]. int operator[] (unsigned n) { return m_v[n]; } private: void reordene(); private: int m_v[Mx]; ///< Vector de valores almacenados unsigned m_n; ///< Ultimo componente libre en el vector \c "m_v" }; // ord_int /// Reordena el valor de \c "this->m_v[]", de manera que quede ordenado. /// \pre Se supone que los valores m_v[0]...v[m_n-2] ya están en orden. void ord_int::reordene() { for (int i =m_n-2; i>=0; --i) { if (m_v[i] > m_v[i+1]) { // intercambia int tmp = m_v[i]; m_v[i] = m_v[i+1]; m_v[i+1] = tmp; } } } // ord_int::reordene() /// Programa principal. int main() { ord_int V; // V.ord_int(); while ( !V.lleno() ) { int m; cout << "Agregue otro número: "; cin >> m; // operator>>(cin, m); V.agregue(m); } for (int i=0; i