我正在嘗試編寫基本的桶排序。我有一個函數,它接受一個向量的開始和結束迭代器。我需要將矢量的value_type模板化,以便我可以使用它爲該排序創建一個桶的向量(使用std :: numeric_limits)。 該函數適用於T不大於短整數的T。使用模板容器迭代器的C++函數
下面是我寫的函數:
template<typename T>
typename std::vector<T>::iterator forwardIterator;
void bucketSort(forwardIterator begin, forwardIterator end) {
std::vector<unsigned> bucketVec(std::numeric_limits<T>::max() + 1, 0);
for (auto it = begin; it != end; it++)
bucketVec[*it]++;
auto it = begin;
for (unsigned j = 0; j < bucketVec.size(); j++)
for (unsigned k = 0; k < bucketVec[j]; k++)
*it++ = j;
}
,當我嘗試使用g ++編譯這個和-std = C++ 11,-O3標誌出現以下錯誤信息:
bucketSort.cpp:14:17: error: variable or field 'bucketSort' declared void
bucketSort.cpp:14:17: error: 'forwardIterator' was not declared in this scope
bucketSort.cpp:14:40: error: 'forwardIterator' was not declared in this scope
bucketSort.cpp: in function 'int main()':
bucketSort.cpp:55:46: error: 'bucketSort' was not declared in this scope
我不明白我在做什麼錯,以及如何解決這個問題,以便它的工作。
模板變量在C++之前是不可能的14。 – 0x499602D2
'bucketVec(std :: numeric_limits :: max()+ 1,0)'似乎是非常錯誤的。如果'T'是無符號的,你的向量將有零個元素,如果'T'有符號,第一個參數將是一個很大的負數(有符號整型轉換是未定義的行爲)。 –
Praetorian
該函數不適用於任何大於16位的T.我最初在我的問題中編寫過這個問題,但是編輯它並忘記重新寫入。 – rminnema