2013-06-21 47 views
3

如何聲明未知STL容器的迭代器?例如,我想寫收到容器中的功能和打印全部採用迭代:如何聲明未知容器的迭代器變量

template <class Container> void print(Container c) { 
    // how to declare iterator??????? 
    my_iterator = c.begin(); 
    while(my_iterator!=c.end()) { 
     cout << *my_iterator << endl; 
     my_iterator++; 
    } 
} 
+2

C++ 11:'auto it = c.begin();' – hmjd

+1

它不是「未知」 - 知道模板類型參數與知道類型一樣好:) – dasblinkenlight

+1

請注意,在這種特殊情況下,您應該通過'const'參考,以避免造成不必要的複製。 – juanchopanza

回答

10

在C++ 03,你需要從容器中的迭代器類型類型明確:

typename Container::iterator it; 
typename Container::const_iterator cit; 

在C++ 11,你可以用auto

auto my_iterator = c.begin(); // iterator in this case 
auto my_iterator = c.cbegin(); // const_iterator always 

另外請注意,建議我@Matthieu,您可以使用基於對C++ 11圈的範圍,以簡化代碼:

template <class Container> 
void print(const Container& c) 
{ 
    for (const auto& elem : c) 
     cout << c << endl; 
} 
+4

在C++ 11中,實際上甚至更好:'for(auto const&element:c)' –

+0

@MatthieuM。當然好點!我專注於對問題的字面解釋。我將添加一些關於基於範圍的循環。 – juanchopanza

0

轉到爲:

for (auto& var : container) 
{ 
    cout << var << endl; 
} 

要顯示容器的每個元件(以及任何其他類型的容器,甚至串或載體或地圖,...的)