[英]C++11 iterator interface
是否可以在C++11
創建一個函數,該函數將接受任何iterator
作為輸入參數,特別是像vector
或list
這樣的 stl 容器?
我想寫一些類似的東西
void f(iterator<int> i){
for (auto el : i)
cout << el;
}
int main(){
vector<int> v;
list<int> l;
...
f(v);
f(l);
}
是否有可能?
如果您希望函數接受迭代器,則不能使用for (auto i: cont)
語法。 事實上,這種新的基於范圍的 for 語法需要容器,而不是迭代器。
然后,您可以輕松地使您的函數成為函數模板,傳遞容器。
template <class CONT>
void f(CONT &cont){
for (auto el : cont)
cout << el;
}
如果您想繼續傳遞迭代器,那么您也必須采用模板方式,但您必須將兩個迭代器作為參數傳遞。 一個用於第一個,另一個用於最后一個(就像algorithm
一樣)。
template <class IT>
void f(IT first, IT last) {
for ( ; first!=last ; ++first)
cout << first;
}
不可以。您可以編寫接受任何迭代器作為參數的函數模板,但不能接受函數。
如果您有一個為迭代器執行類型擦除的類,那么您可以將其作為參數。 這是迭代器類型擦除的文章和代碼。
某處有一個 boost::any_iterator 。 但是標准沒有提供。
如果您正在尋找一種返回大多數未指定迭代器類型的方法(例如,因為基類中的函數簽名還不能修復迭代器的確切類型),您可以看看C++:“Iterable<T> “ 界面
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.