我正在根據計數排序製作自己的sort()算法。它對範圍有限的正數進行排序。到目前爲止,它在std :: string和std :: vector上工作。在模板函數中需要什麼類型的迭代器?
的原型如下:
template<class ForwardIterator, int maxNumbers>
void sortIntegers(ForwardIterator start, ForwardIterator end)
我的算法使用*iter =
,++iter
和copy = iter
。從http://www.cplusplus.com/reference/iterator/我確定我需要一個ForwardIterator或更好的。
這是確定我的算法需要的最常用類型的迭代器的正確方法嗎?我不確定我應該試圖成爲通用的。我只是猜我應該。這樣我可以支持最多的容器。然後,當我看着STL sort()時,我發現它使用了隨機訪問迭代器(http://www.cplusplus.com/reference/algorithm/sort/)。對我而言,這意味着它受限於它支持的容器。例如,它會在名單上工作嗎?
我認爲STL做得很對。那麼,爲什麼我的錯誤只需要在我的函數中使用ForwardIterator?也許當我測試更多容器類型時,我會意識到我需要更嚴格?另外作爲獎勵,我知道只將類類型命名爲ForwardIterator只是文檔要求。 STL是否做了更多的工作以確保傳遞給sort()的是一個隨機訪問迭代器?所以如果我傳入一個列表迭代器來排序(),我假設我得到錯誤。這些錯誤如何產生?
我建議使用[en.cppreference.com](http://en.cppreference.com/w/cpp/iterator),而不是那些不可靠的cplusplus.com的東西。 –
'std :: sort'需要隨機訪問,因爲'qsort'需要隨機訪問。 – NathanOliver
'std :: sort'不適用於'std :: list',但是'std :: list'提供它自己的版本,作爲成員函數'std :: list :: sort'。 –