Please help me understand the following code

I have difficulty understanding how the following function works. I know that it removes an item from an array.

void remove(float a[], int& n, int i){
    for (int j=i+1; j<n; j++)
        a[j-1] = a[j];
     --n;
    }

This bit of code here is shifting all elements down by 1, essentially overwriting the element at index i, which is what gets “removed”.

For instance, for an array [10,20,30,40,50], if you call the function as remove(arr, 5, 2), the first iteration begins with j=i+1, so j is index 3, and the statement a[2] = a[3] causes the element at index 2 to be overwritten with the element at index 3, so 30 gets replaced with 40. In the next (and final) iteration, 40 gets replaced with 50.

This operation is commonly referred to as “shifting elements” and is common for array manipulation cases where you have to add an element/delete an element, so you have to adjust the remaining elements by “shifting them” up or down, as the case maybe, so you don’t leave “holes” in your array.