Remove continuous duplicate
Let's go through mechanical errors:


use size_t instead of int

int length = vec.size();

what if there is no zero element?

result[0] = vec[0];

the same as first:

int last = 0;

the same as 1, 3:

for(int i=0; i&lt;length; i++)



Optimization errors:


Is there any reason why do you need to return a COPY of vector? If you need return copy, so why do you pass it by reference?
Extra resize of vector is extremely heavy and slow operation.

result.resize(last+1); 

Prefer pre-increment to post-increment
use reserve and push_back, instead of resize and []. In you case result.size() &lt;= v.size(). So, make following:

std::vector&lt;T&gt; result;
result.reserve(v.size);
result.push_back( vec[0] );


In the loop:

result.push_back( vec[i] );



So, including all comments above:

template&lt;class T&gt;
std::vector&lt;T&gt; remove_duplicate(const std::vector&lt;T&gt;&amp; vec)
{
    std::vector&lt;T&gt; result;

    if(!vec.empty())
    {
        result.reserve(vec.size());
        result.push_back(vec.front());

        for(size_t i = 0; i&lt; vec.size(); ++i)
            if(vec[i] != result.back())
                result.push_back( vec[i] );
    }

    return result;
}