簡體   English   中英

C++11 迭代器接口

[英]C++11 iterator interface

是否可以在C++11創建一個函數,該函數將接受任何iterator作為輸入參數,特別是像vectorlist這樣的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM