C++ 如何在c+中对stl迭代器进行平均运算+;

C++ 如何在c+中对stl迭代器进行平均运算+;,c++,vector,stl,iterator,C++,Vector,Stl,Iterator,我正在尝试基于stl向量和迭代器的合并算法,我知道也有std::merge,但我想做我自己的版本,我想平均两个迭代器并获得中间索引,就像我在普通整数imidle=(iEnd+iBegin)/2中所做的那样。然而,它从来都不起作用,然后我尝试通过得到向量大小并除以2来增加值 iMiddle=iBegin+A.size()/2 ,但这是一种stubid方法,当拆分超过1次时也会遇到问题,有没有更好的解决方案 void TopDownMergeSort(int n, vector<int>

我正在尝试基于stl向量和迭代器的合并算法,我知道也有std::merge,但我想做我自己的版本,我想平均两个迭代器并获得中间索引,就像我在普通整数
imidle=(iEnd+iBegin)/2
中所做的那样。然而,它从来都不起作用,然后我尝试通过得到向量大小并除以2来增加值

iMiddle=iBegin+A.size()/2

,但这是一种stubid方法,当拆分超过1次时也会遇到问题,有没有更好的解决方案

 void TopDownMergeSort(int n, vector<int> A, vector<int> B)
{
    TopDownSplitMerge(A, A.begin(), A.end(), B);
}

void TopDownSplitMerge(vector<int> A, vector<int>::iterator iBegin, vector<int>::iterator iEnd, vector<int> B)
{
    vector<int>::iterator iMiddle;
    // if run size == 1
    if((iEnd - iBegin) < 2){
        cout<<"merge finshed!"<<endl;
        return;    //   consider it sorted
    }                       

    iMiddle = iBegin+A.size()/2;
    TopDownSplitMerge(A, iBegin,  iMiddle, B);  // split / merge left  half
}
void TopDownMergeSort(int n,向量A,向量B)
{
TopDownSplitMerge(A,A.开始(),A.结束(),B);
}
void TopDownSplitMerge(向量A,向量::迭代器iBegin,向量::迭代器iEnd,向量B)
{
向量::迭代器imddle;
//如果运行大小==1
如果((iEnd-iBegin)<2){

本可以更改它!非常感谢您的回答,如果有人有相同的问题,我会更新它:-)@Lbj_x请记住,这不适用于所有类型的迭代器。@juanchopanza谢谢您的提醒!
middle = begin + std::distance(begin, end) / 2;