| Код | #include "stdafx.h" #include <iostream>
class overflow{};
template <typename T> void qSort(T* A, size_t low, size_t high) { int i = low; int j = high; T x = A[(low+high)/2]; // x - опорный элемент посредине между low и high do { while(A[i] < x) ++i; // поиск элемента для переноса в старшую часть while(A[j] > x) --j; // поиск элемента для переноса в младшую часть if(i <= j){ // обмен элементов местами: T temp = A[i]; A[i] = A[j]; A[j] = temp; // переход к следующим элементам: i++; j--; } } while(i < j); if(low < j) qSort<T>(A, low, j); if(i < high) qSort<T>(A, i, high); }
template <typename T> class Vector { public: Vector(size_t _size=0) { this->arry = new T[_size]; this->size = _size-1; } Vector(Vecror<T>& cpy) { delete this->arry; this->arry = new T[cpy.getSize()-1]; for (int i = 0; i< cpy.getSize(); i++) arry[i] = cpy[i]; this->size = cpy.getSize()-1; } T& operator [](size_t n) { if (n > (this->size)) throw overflow(); return this->arry[n]; } size_t getSize() { return this->size+1; } void operator =(Vector<T>& cpy) { delete this->arry; this->arry = new T[cpy.getSize()-1]; for (int i = 0; i< cpy.getSize(); i++) arry[i] = cpy[i]; this->size = cpy.getSize()-1; }
T& at(size_t n) { return arry[n]; } void push_back(T addel) { T* arrcopy = new T[this->size]; for (int i = 0; i<this->size; i++) arrcopy[i] = this->arry[i]; delete[] this->arry; arry = new T[this->size+1]; for (int i = 0; i<(this->size); i++) this->arry[i] = arrcopy[i]; delete arrcopy; ++size; } void pop(size_t n) { std::cerr << this->size; T* arrnew = new T[this->size-1]; //first alloc
for (int i = 0; i<(this->size); i++){ if (i==n) i++; arrnew[i] = arry[i]; } delete arry; arry = new T[this->size-1]; //second alloc for (int i = 0; i<(this->size); i++){ arry[i] = arrnew[i]; } } size_t find (T el) { size_t pos=0; while (arry[pos] != el) pos++; return pos; } void pop_back() { T* arrnew = new T[this->size-1]; for (int i = 0; i<(this->size-1); i++) arrnew[i] = this->arry[i]; delete[] arry; this->arry = new T[this->size] for (int i = 0; i<(size-1); i++) arry[i] = arrnew[i]; --i; } void sort() { qSort<T>(arry, 0, this->size); } ~Vector() { delete[] arry; } private: T* arry; size_t size; };
|
На сколько я понял, тебе надо именно это. Иначе из тебя вырастит явист.
Цитата(Aleksandra24 @ 18.4.2013, 22:26 ) | | Я все нашла, можете помочь мне ее разбить на классы, чтоб был класс для хранения памяти,класс на ввод массива, на вычисления минимальных элементов,класс на удаление минимальных элементов, класс на вывод данных. |
Не возможно это! Класс на ввод массива - это вектор(я тебе его написал), в нем есть функция сортировки (функция быстрой сортировки объявлена вне класса, но в классе есть обертка над ней, если хочешь перемести ее, как статическую функцию в класс). Так вот вводишь вектор, копируешь, сортируешь копию, минимальные элементы будут 2 с конца ищешь их в исходном и удаляешь их в исходном. РАБОТА ЗАКОНЧЕНА! |