Удаление элементов массива стоящих перед минимальным элементом

Помогите бедному студенту. Задание звучит так - Удалить все элементы стоящие перед минимальным элементом, сдвинув массив влево. Уже неделю сижу, а лабу сдавать надо. Вот то что есть, но сдвиг происходит не правильно и не удаляет элементы.



    #include <iostream>
    #include <ctime>
    int minI;
    void leftRotatebyOne(int arr[], int n)
    {
        int temp = arr[0], i;
        for (i = 0; i < n - minI; i++)
            arr[i] = arr[i + minI];

        arr[i] = temp;
    }


    using namespace std;

    int main(){
        int l, templ;
        int minI = 0;
        cout << "Enter the numbers of elements: ";
        cin >> l;
        srand(time(NULL));
        int* mas = new int[l];

        cout << "Array:" << endl;

        for (int i = 0; i < l; i++)
        {
          mas[i] = rand() % 27;
          cout << i + 1 << " Element: " << mas[i] << endl;
        }
        cout << endl;
        int min = mas[0];
        for(int i = 0; i < l; ++i)
        {
            if(mas[i] < min)
            {
                min = mas[i];
                minI = i;
            }
        }
        cout << endl;
        cout << "Smallest Element in an Array:" << endl;
        cout << min << endl;
        cout << "Index" << endl;
        cout << minI << endl;
        cout << endl;

        for ( int i = 1; i < l; i++){
            templ = mas[minI];
            mas[minI] = mas[l-minI];
            mas[i] = templ;
            cout << "Shift Left:"<< mas[i] <<endl;
        }
        return 0;
    }

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

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

в каком смысле "удалить"? в c++ в массивах нельзя "удалять" или "Добавлять" элементы, если не считать контейнеров, в памяти так и так что-то остается, вопрос только в том, чем вы замените "ненужные" элементы. Можно создать новый массив и переписать в него элементы согласно условиям задачи. В вашем случае можно сделать проще, последний цикл переписать на:

for (int i = l-1; i > minI; i--) {
    l--;
}

или "перед ним" в смысле "ДО него"? тогда можно так

for (int a = 0, b = minI; b<l ; a++, b++) {
    swap(mas[a], mas[b]);
}
l -= minI;
→ Ссылка