1
我研究的基本排序算法,我一直在尋找關於殼牌排序這裏: 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,那就沒有意義了。
更精確地說:減法迭代器的結果必須是有符號整型。如果你使用的是標準分配器,它總是會是'ptrdiff_t'。然而,你可以定義你自己的分配器,用它們實例化容器,然後改變它。 (如果你改變它也不是一個有符號的整數類型,那麼你有未定義的行爲。) –
但是他使用std :: swap(* j,*(j-h))的行怎麼辦? ? 在這裏,他解引用迭代器減法的結果。 –
@shortage_radeon'h'類型爲'int' – Brian