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

How to do average operation on stl iterator in c++

本文关键字:运算 迭代器 stl c++ 中对      更新时间:2023-10-16

我正在尝试基于stl向量和迭代器的合并算法,我知道还有std::merge,但我想制作自己的版本,我想像在正整数iMiddle = (iEnd + iBegin) / 2中那样平均两个迭代器并获得中间索引。尽管如此,它永远不会起作用,然后我试图通过获得向量大小并除以2 来增加值

i中间=i开始+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
}

更新

使用

i中间=i开始+距离(i开始,i结束)/2;

一切都很好!

middle = begin + std::distance(begin, end) / 2;