【发布时间】:2009-09-19 08:11:53
【问题描述】:
在过去 8 年左右的时间里,我几乎完全是一名 Java 程序员,最近我又开始使用 C++。这是我遇到的关于 C++ STL 和 Java 中的迭代器的问题。
在 Java 中,您可以编写一个接受迭代器的方法,如下所示:
void someMethod(Iterator<String> data) {
// ...
}
您传入一个Iterator,该方法不需要知道该迭代器的底层集合是什么,这很好。
在 C++ 中,没有通用的迭代器基类(据我所知)。我必须写一个这样的函数:
void some_function(std::vector<std::string>::const_iterator data) {
// ...
}
换句话说,some_function 知道迭代器是 vector 上的迭代器。这不好,因为无论迭代器的底层集合是什么,我都希望函数能够工作。
如何在 C++ 中做到这一点?如果真的不可能,那么在 C++ 中创建一个将集合作为参数的函数的最佳方法是什么,但不需要知道集合的确切类型是什么?
附录
感谢您的回答。除了答案之外,我在The C++ Standard Library: A Tutorial and Reference (作者 Nicolai M. Josuttis)一书的第 7.5 段(迭代器特征)中找到了一些很好的信息。第 7.5.1 段解释了如何为不同的迭代器类别编写专门的函数版本。
【问题讨论】:
标签: java c++ collections