Jes*_*per 2 c++ java collections
在过去8年左右的时间里,我几乎一直是Java程序员,最近我又一直在玩C++.对于C++ STL和Java中的迭代器,我遇到了一个问题.
在Java中,您可以编写一个采用如下迭代器的方法:
void someMethod(Iterator<String> data) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
你传入一个Iterator并且该方法不需要知道该迭代器的底层集合是什么,这很好.
在C++中,迭代器没有通用的基类(据我所知).我必须写一个这样的函数:
void some_function(std::vector<std::string>::const_iterator data) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
换句话说,some_function知道迭代器是一个迭代器vector.这不好,因为无论迭代器的底层集合是什么,我都希望函数能够工作.
我怎么能用C++做到这一点?如果它真的不可能,那么在C++中创建一个以集合作为参数的函数的最佳方法是什么,但是不需要知道具体的集合类型是什么?
附录
谢谢你的回答.除了答案之外,我在"C++标准库:教程和参考"(Nicolai M. Josuttis)一书的第7.5段(迭代器特征)中找到了一些很好的信息.第7.5.1段解释了如何为不同的迭代器类别编写函数的专用版本.
您可能想要考虑一个功能模板.看看一些std <algorithm>功能模板是如何工作的std::for_each.
例如
template< class Iterator >
void some_function( Iterator first, Iterator last )
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用多种可迭代范围调用从此模板生成的函数.
例如
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 );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2145 次 |
| 最近记录: |