减去迭代器和整数

Subtraction of iterators and integers

本文关键字:整数 迭代器      更新时间:2023-10-16

我正在研究基本的排序算法,我在这里寻找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 返回一个迭代器。如果"大小"是一个迭代器,那么它有什么作用?我的意思是,如果它只是将内部指针除以 3,那就没有意义了。

从一个迭代器中减去另一个迭代器应该得到一个整数。STL 的随机访问迭代器在减去时生成类型为 ptrdiff_t 的值。在实现迭代器时,最好使用此类型。但是,在实践中,如果您想使用,例如,int,那通常也可以。

从迭代器

中减去整数会生成另一个迭代器