Как написать функцию, которая принимает итератор или коллекцию в общем виде?

Я был программистом на 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 объясняется, как писать специализированные версии функций для разных категорий итераторов.

Ответы на вопрос(4)

Ваш ответ на вопрос