在过去 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
知道迭代器是 a 的迭代器vector
。这不好,因为我希望无论迭代器的底层集合是什么,该函数都能工作。
我怎样才能在 C++ 中做到这一点?如果这确实不可能,那么在 C++ 中创建一个以集合作为参数但不需要知道集合的确切类型的函数的最佳方法是什么?
Addendum
感谢您的回答。除了答案之外,我在本书的第 7.5 段(迭代器特征)中发现了一些关于此的好信息C++ 标准库:教程和参考(尼古拉·M·约苏蒂斯著)。第 7.5.1 段解释了如何为不同的迭代器类别编写专门版本的函数。
您可能需要考虑函数模板。看看一些如何std
<algorithm>
函数模板的工作原理如下std::for_each
.
e.g.
template< class Iterator >
void some_function( Iterator first, Iterator last )
{
// ...
}
然后,您可以使用多种可迭代范围调用从此模板生成的函数。
e.g.
std::vector< double > my_doubles;
// ... populate doubles
some_function( my_doubles.begin(), my_doubles.end() );
std::set< Custom > my_custom_class_set;
// ... populate ...
some_function( my_custom_class_set.begin(), my_custom_class_set.end() );
int raw_array[50];
// ... populate ...
some_function( raw_array, raw_array + 50 );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)