我有以下函數來獲取一個容器的n
元素 - O(n)
:如何重載模板函數以匹配特定容器?
template<typename Container>
const typename Container::value_type& getNthElement(const Container& container, size_t n) {
auto itr = cbegin(container);
for (auto i = 0u; i < n; ++i) {
++itr;
}
return *itr;
}
而對於vectors
我有這個過載 - O(1)
:
template<typename T>
T getNthElement(const vector<T>& container, size_t n) {
return container[n];
}
現在,如果我想用一個雙端隊列(其中也有O(1)
實現),將使用O(n)
實現調用第一個模板函數。
第二重載功能如何適應vectors
和deques
?
我的問題摘自this文章。
查找[模板專業化](http://stackoverflow.com/search?tab=relevance&q=%5bc%2b%2b%5dtemplate%20specialization) –
我只想要一個函數用於兩個容器,我不是當然,我怎麼能用模板專門化來匹配它們。 – Kobe