c – 当对象类型未知时如何实现交换功能

我试图自己实现所有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);
}
点赞