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)