Merge sort using c++ vectors
I think you input routine is not really safe. maybe add an explicit break?

while (true) {
    cin &gt;&gt; num;
    if (cin.fail)
        break;
    vect.push_back(num);
}

What happens when unsorted_vector is empty. You check for size == 1 maybe turn that into size &lt;= 1
Stuff like this is hard to read:

std::vector&lt;int&gt; sorted_vect, first_half, second_half, first_temp, second_temp;


I would definitely suggest to put every name onto its own line and add the explicit type. Its not that you are saving trees here.
Do not use else after an early exit.

if(unsorted_vector.size() == 1) {
    return unsorted_vector;
} else {
// Stuff
}


Is equivalent to:

if(unsorted_vector.size() == 1) {
    return unsorted_vector;
}
// Stuff


However with less indentation and easier control flow.
You should definitely reserve memory in your merge function:

vector&lt;int&gt; sorted_vect;
sorted_vect.reserve(first_vect.size()+second_vect.size());

Use descriptive names. This is purely subjective, but whenever I see vect and friends i cringe. What do you really save from ommitting "or"?