Here is the problem:
void mergesort(std::vector<int> &vec)
{
int n = vec.size();
if (n == 1) return;
else {
std::vector<int> v1, v2;
for (int i = 0; i != n; ++i) {
if (i <= n / 2)
v1.push_back(vec[i]);
else
v2.push_back(vec[i]);
}
mergesort(v1);
mergesort(v2);
merge(vec, v1, v2);
}
}
The inside loop should looks like that:
for (int i = 0; i != n; ++i) {
if (i <= (n - 1) / 2)
v1.push_back(vec[i]);
else
v2.push_back(vec[i]);
}
In this computation we need index of last element, and n is the number of elements of 0 indexed array, so:
(n - 1) / 2