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

时间:2013-06-21 11:12:20

标签: c++ iterator containers

如何为未知的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 个答案:

答案 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;
}

显示容器的每个元素(以及任何其他类型的容器,甚至是字符串或矢量或地图,......)