Aman Ullah
Aman Ullah

Reputation: 29

deleting multiple elements in an array

i am trying to write a code that will delete all the elements if an array has same element at different index . it works fine for one element deletion or elements at odd index i.e 1,3,5 etc but it neglects one element if the consecutive index have same element.

i have just tried this to get my hands on arrays

for(int i=0;i<n;i++)                                     //for deletion
    {
        if(arr[i]==_delete)
        {   
            arr[i]=arr[i+1];
           --n;

        }

    }

Upvotes: 1

Views: 1755

Answers (2)

ampawd
ampawd

Reputation: 1010

As an additional solution, if you want to deal with built-in C++ arrays, the standard std::remove algorithm can be rewritten like this:

void remove(int _delete) {
    int j = 0;
    for (int i = 0; i < n; ++i) {
        if (arr[i] != _delete) {
            arr[j++] = arr[i];
        }
    }
    // update the size!
    n = j;
}

It's quite pretty:

We keep in the array the elements we only need, and override the ones in which we are not interested (they can be either equal or not to _delete and start at position j till the end)

Upvotes: 2

schorsch312
schorsch312

Reputation: 5694

I suggest you use std::vector as a container for your objects.

std::vector<TYPE> vec ;
// initialise vector

You can use

vec.erase(std::remove_if(vec.begin(), vec.end(),
                          [](const auto & item){return item == _delete;}), vec.end());

Alternatively, you can use std::list. Its list::erase has linear time complexity.

Upvotes: 2

Related Questions