我正在研究基本的排序算法,我在这里看看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,那就毫无意义了。
答案 0 :(得分:3)
从另一个中减去一个迭代器应该产生一个整数。 STL的随机访问迭代器在减去时会产生类型ptrdiff_t
的值。一般来说,在实现迭代器时使用此类型是一种很好的做法。但是,在实践中,如果你想使用int
,那通常也很好。
从迭代器中减去一个整数会产生另一个迭代器。