Одна проблема связана с использованием reserve()
(либо используйте resize()
, либо добавьте элементы с push_back()
вместо доступа к индексу).
if (a.size() == 1) return a;
int middle = a.size() / 2;
vector<int>::const_iterator first = a.begin();
vector<int>::const_iterator mid = a.begin() + (middle - 1);
vector<int>::const_iterator last = a.end();
vector<int> ll(first, mid);
vector<int> rr(mid, last);
Это может быть еще одна проблема. Если размер равен 2, то ll
окажется пустым вектором, и эта функция не справится с этим. В любом случае, нет особой причины вычитать 1 из середины.
Также возможно, что вы копируете вещи куда больше, чем нужно: вам не нужны векторы l
и r
(потому что они будут просто копиями ll
и rr
), аналогично Я не думаю, что вам нужен вектор result
, так как вы можете просто записать объединенные результаты обратно в a
.