将向量迭代器传递给模板函数

时间:2014-11-09 09:24:47

标签: c++ templates iterator stdvector

在将迭代器传递给函数时,我认为使用向量更容易,所以我使用构造函数进行转换,但看起来像是创建了新的向量。因此,函数没有返回任何更改。但我需要它变化而不需要记忆。

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。可能有人可以帮我解决问题的第二部分吗?

1 个答案:

答案 0 :(得分:1)

无需在函数内构造新的向量。您只需使用迭代器即可完成算法。但是如果你想这样做是因为它“更容易”,你必须在完成向量后将结果数组中的值复制到参数范围。您无法避免使用您的方法分配新内存。

至于第二个问题,编译器无法推导出Element类型。你可以通过声明这样的模板来解决这个问题:

template <class Iter>
void HeapSort::MaxHeapify(Iter first, Iter last, ...)

作为奖励,这允许该函数与任何类型的随机访问迭代器一起使用。