I suppose that means in O(1) size - ie. without using any auxiliary container at all.
If the order of the non-duplicated values need not be preserved, sort the vector, std::unique() (or its equivalent), and then pop off the duplicated values at the back of the sequence. http://en.cppreference.com/w/cpp/algorithm/unique
If the order of the non-duplicated values must be preserved, something like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
std::vector<int> seq = { 10, 7, 10, 4, 1, 0, 10, 4, 9, 7 } ;
for( std::size_t i = 0 ; i < seq.size() ; ++i )
{
std::size_t j = i + 1 ;
while( j < seq.size() ) // for every element after i
{
if( seq[i] == seq[j] ) // if it is a duplicate
{
// move all elements after it by one position to the left
for( std::size_t k = j+1 ; k < seq.size() ; ++k )
seq[k-1] = seq[k] ;
seq.pop_back() ; // and pop off the last element
}
else ++j ;
}
}