如何为未知的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++;
}
}
答案 0 :(得分: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;
}
答案 1 :(得分:0)
Go for:
for (auto& var : container)
{
cout << var << endl;
}
显示容器的每个元素(以及任何其他类型的容器,甚至是字符串或矢量或地图,......)