Как написать функцию, которая принимает итератор или коллекцию в общем виде?
Я был программистом на Java почти исключительно последние 8 лет или около того, а недавно я снова играл на 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 ++, которая принимает коллекцию в качестве параметра, но ей не нужно знать, какой именно тип коллекции?
добавление
Спасибо за ответы. В дополнение к ответам я нашел некоторую хорошую информацию об этом в пункте 7.5 (Черты итератора) книгиСтандартная библиотека C ++: учебное пособие и справочник (Николай М. Йосуттис). В параграфе 7.5.1 объясняется, как писать специализированные версии функций для разных категорий итераторов.