gpt4 book ai didi

c++ - 将 vector 迭代器传递给模板函数

转载 作者:行者123 更新时间:2023-11-28 06:35:38 25 4
gpt4 key购买 nike

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

template <class Element>
void HeapSort::MaxHeapify(typename vector<Element>::iterator first, typename vector<Element>::iterator last, ...)
{
vector<Element> array(first, last);
...
}

此外,在调用此类函数时,我必须明确指出元素的类型。为什么?

MaxHeapify<Element>(array.begin(), array.end(), i);

编辑:easier i 的意思是 *(first + i) = 5 不是那么容易编写然后读取为 array[i] = 5

编辑 2:它似乎可以写成 first[i] = 5。有人可以帮我解决问题的第二部分吗?

最佳答案

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

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

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

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

关于c++ - 将 vector 迭代器传递给模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26826795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com