减去迭代器和整数

时间:2014-02-25 17:37:24

标签: c++ sorting iterator

我正在研究基本的排序算法,我在这里看看Shell Sort: https://github.com/nicolausYes/iterator-template-sort-library/blob/master/src/ShellSort.h

以下是相关代码:

template< class RandomAccessIterator, class Compare >
static void sort( RandomAccessIterator first, RandomAccessIterator last, Compare comp )
{
    auto size = last - first;
    auto h = 1;
    while( h < size / 3 ) h = 3 * h + 1;

    while( h >= 1 )
    {
        for( auto i = first + h; i != last; i++ )
        {
            for( auto j = i; (j - first) >= h && comp(*j, *(j-h)); j -= h )
                std::swap( *j, *(j-h) );
        }

        h /= 3;
    }
}

当他声明大小时,它应该是一个整数值还是另一个迭代器?因为他之后将其除以数字:“size / 3” 但是当他调用std :: swap(* j,*(j - h))时;他正在交换2个迭代器的内部,所以j - h返回一个迭代器。如果“size”是迭代器那么,它做什么/做什么?我的意思是如果它只是将内部指针拆分为3,那就毫无意义了。

1 个答案:

答案 0 :(得分:3)

从另一个中减去一个迭代器应该产生一个整数。 STL的随机访问迭代器在减去时会产生类型ptrdiff_t的值。一般来说,在实现迭代器时使用此类型是一种很好的做法。但是,在实践中,如果你想使用int,那通常也很好。

从迭代器中减去一个整数会产生另一个迭代器。