我试图自己实现所有STL函数.
在make_heap函数中,我需要交换两个对象.现在,因为我想要STL,就像我不能改变我的论点列表.
所以我不能声明第一个指向的对象的变量.
我也不能在没有临时变量的情况下使用swap
swap (RandomAccessIterator a,RandomAccessIterator b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
因为两个指针所指向的给定对象的运算符和 – 可能没有重载.
这是我的代码:
template <class RandomAccessIterator>
void make_heap (RandomAccessIterator first,RandomAccessIterator last)
{
int num_ele = (last - first) + 1;
for (int i=num_ele-1;i>=1;i--)
{
if (first[i] < first[(i-1)/2])
{
swap (/* Here is where i am struck..! */);
}
}
}
PS:假设对象在
最佳答案 您可以使用(在C 11中):
void iter_swap(RandomAccessIterator a, RandomAccessIterator b)
{
auto temp(std::move(*a));
*a = std::move(*b);
*b = std::move(temp);
}
或者使用std :: iterator_traits
void iter_swap(RandomAccessIterator a, RandomAccessIterator b)
{
std::iterator_traits<RandomAccessIterator>::value_type temp(std::move(*a));
*a = std::move(*b);
*b = std::move(temp);
}