void bmerge(vecitr itr1, vecitr itr2, vecitr itr3)
{
int s1 = itr2-itr1; //both array are contiguous. itr1 is beggining of first arry
int s2 = itr3-itr2; // itr2 is beginning of 2nd array and itr3 is end of 2nd array
int i=0,j=0;
vector<int> buffer(s1);
copy(itr1,itr2,buffer.begin()); //copying content of 1st array to a buffer
vecitr temp = buffer.begin();
while(i<s1 && j<s2)
{
if(*(temp+i) < *(itr2+j))
{
*(itr1+k) = *(temp+i);
i++;
k++;
}
else
{
*(itr1+k) = *(itr2+j);
j++;
k++;
}
}
if(i<s1)
{
copy(temp+i,temp+s1,itr1+k);
}
}
Этот код работает в 3 раза медленнее, чем std :: inplace_merge. Я просто не понимаю почему. У меня есть вектор около 100 000 итераторов, который указывает на отсортированную последовательность в одном векторе, и я вызываю эту функцию, чтобы рекурсивно объединить их в одну единственную последовательность.