在将迭代器传递给函数时,我认为使用向量更容易,所以我使用构造函数进行转换,但看起来像是创建了新的向量。因此,函数没有返回任何更改。但我需要它变化而不需要记忆。
template <class Element>
void HeapSort::MaxHeapify(typename vector<Element>::iterator first, typename vector<Element>::iterator last, ...)
{
vector<Element> array(first, last);
...
}
另外,在调用这样的函数时,我必须明确指出Element的类型。为什么呢?
MaxHeapify<Element>(array.begin(), array.end(), i);
编辑:更容易,我的意思是*(first + i) = 5
不是那么容易写,然后读作array[i] = 5
。
编辑2:似乎可以写成first[i] = 5
。可能有人可以帮我解决问题的第二部分吗?
答案 0 :(得分:1)
无需在函数内构造新的向量。您只需使用迭代器即可完成算法。但是如果你想这样做是因为它“更容易”,你必须在完成向量后将结果数组中的值复制到参数范围。您无法避免使用您的方法分配新内存。
至于第二个问题,编译器无法推导出Element
类型。你可以通过声明这样的模板来解决这个问题:
template <class Iter>
void HeapSort::MaxHeapify(Iter first, Iter last, ...)
作为奖励,这允许该函数与任何类型的随机访问迭代器一起使用。