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++;
    }
}
4

2 回答 2

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 中使用基于范围的 for 循环来简化代码:

template <class Container> 
void print(const Container& c)
{
    for (const auto& elem : c)
        cout << c << endl;
}
于 2013-06-21T11:13:14.820 回答
0

去做:

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

显示容器的每个元素(以及任何其他类型的容器,甚至是 string 或 vector 或 map ,...)

于 2014-05-09T20:38:31.883 回答