C++ 如何在c+中对stl迭代器进行平均运算+;
我正在尝试基于stl向量和迭代器的合并算法,我知道也有std::merge,但我想做我自己的版本,我想平均两个迭代器并获得中间索引,就像我在普通整数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>
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;