(不確定這是否是正確的任務) 我正在寫一個與經典排序相關的stl風格的算法。 原型爲:如何使用end()迭代器擴展範圍
template<typename RAIter>
void Algo(RAIter first, RAIter last) {
....
size_t size = std::distance(first, last);
RAIter midIter =first;
std::advance(midIter, size/2 - 1);
Algo(first, midIter);
Algo(midIter + 1, last);
....
}
,但它不正確的我,因爲,最初 它得到的範圍內工作一樣: 矢量V; Algo(v.begin(),v.end());然而,在內部,在遞歸調用中,子範圍不包含end()元素。
這種情況下的典型技術是什麼?
你是算法內部不一致。你在被排除的末尾調用它,但是你可以遞歸地調用它,並且結尾被包含和排除。 – chris 2015-03-31 17:31:28
實際上問題是 - 如何爲內部呼叫添加end()元素 – amigo421 2015-03-31 17:36:09
如果內部呼叫的合約比用戶呼叫的合約不同,則需要不同的功能。 – chris 2015-03-31 17:40:29