15,881,413 members
See more:
I have a vector array of n elements and I let users to enter n number of integers. Now, I want my array to contain only distinct integers. In other words, I want it to remove all the copies of an integer so that the array is left with only one occurrence of every integer.

If my vector p = {-1, 1, 4, 1, 4, 7, 3, 7, 7}

output should be: p = {-1, 1, 3, 4, 7}

C++
```std::sort(p.begin(), p.end());
for (int i=1; p[i] == p[i+1]; i++){
do {
p.erase(p.begin() + i+1);
} while (p[i]==p[i+1]);
}
```

However I'm not getting a proper output. Can someone suggest some corrections to my code? Or even suggest a better way to code in C++?

What I have tried:

As you can see, I've tried to sort my array so that all the copies of an integer are placed consecutively. Then I'm erasing the immediate next element whenever I see two elements of same value.
Posted
Updated 3-Oct-16 3:19am

## Solution 2

You may use `std::unique` after `std::sort`. See the sample code at std::unique - cppreference.com[^].

Kishaan Jeeveswaran 3-Oct-16 9:03am
That's a cool option. But it doesn't resize the array after removing the copies of the elements right? I need the array's size after removing all the copies!

## Solution 1

Um...look at your for loop: the termination condition is when the first non-duplicate is found, not when you run out of comparisons to make.
You need the loop to work with all elements pairs, and an if condition inside the loop to determine if the element should be removed.

Kishaan Jeeveswaran 3-Oct-16 8:55am
Do you mean that I should type (p[i] != p[i+1]) in the for loop and replace the inner do-while loop with another for loop?
OriginalGriff 3-Oct-16 9:04am
No, the outer loop need to check if there are still elements left (i.e. i < number of elements) and the inner loop needs to be removed and replaced with an if that removes one element.
Kishaan Jeeveswaran 3-Oct-16 9:07am
Ok, got it! I'll try it out. Thanks for your time :)
OriginalGriff 3-Oct-16 9:16am
You're welcome!

## Solution 3

Found the solution!

I used
C++
```std::sort(p.begin(), p.end());
p.erase( std::unique( p.begin(), p.end() ), p.end() );```

And it automatically deleted all the copies and gave me the new array size! Thanks for the suggestion guys! :)