将向量迭代器传递到模板函数中
Passing vector iterators into a template function
在将迭代器传递到函数中时,我认为使用向量更容易,所以我使用构造函数进行转换,但看起来像是创建了新的向量。因此,函数没有返回任何更改。但我需要它是可变的,而不是新的记忆。
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
。也许有人能帮我解决问题的第二部分吗?
不需要在函数中构造新的向量。您可以只使用迭代器来执行算法。但是,如果你想这样做,因为它"更容易",你必须在处理完向量后将结果数组中的值复制到参数范围。你的方法无法避免分配新内存。
至于第二个问题,编译器无法推导出Element
类型。你可以通过如下声明模板来解决这个问题:
template <class Iter>
void HeapSort::MaxHeapify(Iter first, Iter last, ...)
作为奖励,这允许函数与任何类型的随机访问迭代器一起工作。
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用向量的template_back函数
- 如何通过派生类函数更改基类中的向量
- 变量没有改变?通过向量的函数调用
- 一对向量构造函数:初始值设定项列表与显式构造
- 在c++中使用向量时,如何调用构造函数和析构函数
- std::sort()函数无法对向量的一部分进行排序
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- C++中函数的向量返回类型引发错误
- 添加存储在向量中的大整数的函数出现问题
- 如何在 c++ 中定义接受不同参数类型的函数向量?
- 具有 lambda 函数的函数向量
- 你能用参数制作函数向量吗?
- 在C++中使用成员函数向量时,有没有办法实现协变返回类型
- 在编写 lambda 函数向量时出现隔离错误
- 如何在 boost.process 间共享内存中使用复杂结构"push_back"函数向量
- 是否将std矢量重新分配到默认的构造函数向量是擦除的好方法
- 运行提升for_each中的成员函数向量
- 创建和回推函数向量
- C++,指向函数向量的指针的STL映射