如何为未知容器声明迭代器变量

She*_*lef 3 c++ containers iterator

如何声明未知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++;
    }
}
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 10

在C++ 03中,您需要显式地从容器类型中获取迭代器类型:

typename Container::iterator it;
typename Container::const_iterator cit;
Run Code Online (Sandbox Code Playgroud)

在C++ 11中,您可以使用auto:

auto my_iterator = c.begin();  // iterator in this case
auto my_iterator = c.cbegin(); // const_iterator always
Run Code Online (Sandbox Code Playgroud)

另请注意,正如我的@Matthieu建议的那样,您可以在C++ 11中使用基于范围的循环来简化代码:

template <class Container> 
void print(const Container& c)
{
    for (const auto& elem : c)
        cout << c << endl;
}
Run Code Online (Sandbox Code Playgroud)

  • 在C++ 11中,实际上甚至更好:`for(auto const&element:c)` (4认同)