Что мне нужно сделать, чтобы вставки работали для массива классов
Мне нужно сделать реализацию для интерфейса отсортированного набора. Любые другие предложения по хорошему и чистому коду были бы великолепны
* 1. size(): возвращает число n элементов в наборе
2. add(x): добавьте элемент x в набор, если он еще не присутствует;
Добавьте x к множеству при условии, что в этом множестве нет элемента y, такого как
что Икс равен игреку. Возвращает true, если x был добавлен в набор, и false
иначе.
3. remove(x): удалить x из набора;
Найдите элемент y в множестве такой, что x равно y, и удалите y.
Возвращает y или null, если такой элемент не существует.
4. find(x): найдите x в отсортированном наборе;
Найдите наименьший элемент y в множестве такой, что y ≥ x. верните y или
null, если такой элемент не существует.*/
<pre>/* * 1. size(): return the number, n, of elements in the set 2. add(x): add the element x to the set if not already present; Add x to the set provided that there is no element y in the set such that x equals y. Return true if x was added to the set and false otherwise. 3. remove(x): remove x from the set; Find an element y in the set such that x equals y and remove y. Return y, or null if no such element exists. 4. find(x): locate x in the sorted set; Find the smallest element y in the set such that y ≥ x. Return y or null if no such element exists.*/ #include <iostream> class SSet{ private: int *arr; int size=0; public: void insert(int var); void remove(int var); int find(int *arr, int left, int right, int value); int getSize(); SSet() { arr=new int; } SSet(const SSet& sset); ~SSet() { delete arr; } }; //resource handle->default memberwise copy is not good SSet::SSet(const SSet &sset) { int local_size=sset.size; for(int i=0; i<local_size; i++) { arr[i]=sset.arr[i]; } } void SSet::insert(int var) { if(size==0) { arr[0]=var; return; } if (find(arr, 0, size - 1, var) == 1) { return; } else { size++; int index = 0; while (var < arr[index] && index < size) { index++; } for (index; index < size; index++) { arr[index + 1] = arr[index]; } } } void SSet::remove(int var) { int index=0; if(find(arr, 0, size, var)) { size--; for (index = 0; index < size; index++) { if (arr[index] == var) { for (index; index < size; index++) arr[index] = arr[index + 1]; return; } } } else{ return; } } int SSet::find(int *arr, int left, int right, int value) { if (right >= left) { int middle = left+(right-left)/2; if (arr[middle] == value) { return middle; } if (value < arr[middle]) { find(arr, left, middle - 1, value); } else { find(arr, middle+1, right, value); } } return -1; //not found } int SSet::getSize() { return size; } int main() { SSet s_set; int *arr=new int; s_set.insert(5); s_set.insert(7); s_set.insert(3); int size=s_set.getSize(); for(int i=0; i<3; i++) { std::cout<<arr[i]<<" "; } int searchFor; std::cin>>searchFor; std::cout<<s_set.find(arr, 0, size, searchFor); delete[] arr; }
Что я уже пробовал:
Я искал в Google, чтобы найти путь, но я думал, что будет гораздо быстрее узнать правильный путь, спросив себя