Сортировка структуры или что-то в этом роде

Представим, что у меня есть массив структур следующего вида:

struct car
{
    int number_car;
    int viezd_car = 0;
};
void main(){
    setlocale(LC_ALL, "ru");
    srand(time(0));
    int N = rand()%(100-0+1)+0;
    int park_mest = rand() % (20 - 0 + 1) + 0;
    car *car1=new car[N+park_mest];`

И мне из него нужно удалять по индексу сами объекты структур. Как лучше отразить то, что у меня по таким-то индексам есть незаполненная структура?

Я полагаю, что нужно каким-то образом сдвинуть влево по индексу все структуры, идущее после удалённой структуры, а потом эту свободную структуру добавить в конец массива. Но как тогда это корректно сделать?

Полный код:

#include <iostream> 
#include <cstdlib>
#include <ctime>
using namespace std;
struct car
{
    int number_car;
    int viezd_car = 0;
};
void main(){
    setlocale(LC_ALL, "ru");
    srand(time(0));
    int N = rand()%(100-0+1)+0;
    int park_mest = rand() % (20 - 0 + 1) + 0;
    car *car1=new car[N+park_mest];
    int variable;
    do
    {
        cout << "Сейчас на парковке:" << N << " машин," << " доступно " << park_mest << " мест для стоянки." << endl;
        cout << "Вы хотите выехать со стоянки или припарковать новую машину?" << endl;
        cout << "1 - припарковать" << endl << "2 - выехать" <<endl<<"0 - выйти из стоянки"<< endl;
        while (!(cin >> variable))
        {
            cout << "Введен неккоректный выбор варианта" << endl << endl;
            cout << "Сейчас на парковке:" << N << " машин," << " доступно " << park_mest << " мест для стоянки." << endl;
            cout << "Вы хотите выехать со стоянки или припарковать новую машину?" << endl;
            cout << "1 - припарковать" << endl << "2 - выехать" << endl << "0 - выйти из стоянки" << endl;

            cin.clear();
            while (cin.peek() != '\n') cin.get();
        } 
        
        if (variable!=1&& variable != 2 && variable != 0 )
        {
            cout << "Введен неккоректный выбор варианта" << endl << endl;
            variable = 5;
        }
        
        switch (variable)
        {
        case 1: {
            if (park_mest!=0)
            {
                car1[N + 1].number_car = N + 1;
                cout << endl << "Вы припарковали машину, номер вашей машины: " << N + 1 << endl;
                cout << endl << endl;
                park_mest -= 1;
                N += 1;
            }
            else
            {
                cout << "Доступные стоянки закончились, припарковаться не где :(" << endl<<endl;
            }

            break;
        }
        case 2: {

            break;
        }
        
        case 0: {
            cout << "Приезжайте еще! :)" << endl;
            break;
        }
        
        
        }
    
    } while (variable!=0); 
    
    delete []car1;
}

Ответы (1 шт):

Автор решения: MBo

а чтобы выехать машине 5 нужно что 1234 ее пропустили и вернулись обратно

Для этой задачи (насколько я её понял) прекрасно подойдут два стека. Это укладывается в суть предмета "алгоритмы и структуры данных"

На запрос "выехать машине X" перекладываете вершину основного стека в дополнительный, пока не встретите X. Потом, чтобы загнать машины назад, делаете наоборот - перекладываете в основной стек, пока вспомогательный не кончится.

Стеки можно использовать готовые из STL std::stack, или самому сделать на основе вектора (проще) или массива, если у вас именно так задано.

→ Ссылка