如何在c++中对stl迭代器进行平均运算
How to do average operation on stl iterator in c++
我正在尝试基于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;
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 不明白迭代器,引用和指针失效,一个例子
- 我可以使用反向迭代器作为ForwardIt吗
- ESP8266单片机矢量迭代器的C++问题
- 如何在C++中将迭代器作为函数参数传递
- 是否应避免从非常量迭代器转换为常量迭代器?
- 如何在c++中对stl迭代器进行平均运算
- end()迭代器上的算术运算
- 对字符串副本执行迭代器运算的更简单方法