为什么我的就地合并代码比std :: inplace_merge运行得慢?

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);

        }

}

这段代码的运行速度比std :: inplace_merge慢了3倍。我只是不明白为什么。我有一个约100,000个迭代器的向量,该向量指向单个向量中的排序序列,并且我将此函数称为将它们递归合并为1个单个序列的函数。

评论