Como escrever uma função que usa um iterador ou coleção de maneira genérica?

Eu tenho sido um programador Java quase exclusivamente nos últimos 8 anos ou mais, e recentemente eu tenho jogado com o C ++ novamente. Aqui está um problema que eu enfrentei no que diz respeito aos iteradores em C ++ STL e Java.

Em Java, você pode escrever um método que usa um iterador como este:

void someMethod(Iterator<String> data) {
    // ...
}

Você passa em umIterator e o método não precisa saber qual é a coleção subjacente desse iterador, o que é bom.

Em C ++, não existe uma classe base comum para os iteradores (até onde eu sei). Eu teria que escrever uma função como esta:

void some_function(std::vector<std::string>::const_iterator data) {
    // ...
}

Em outras palavras,some_function sabe que o iterador é um iterador ao longo de umvector. Isso não é bom, porque quero que a função funcione, independentemente de qual seja a coleção subjacente do iterador.

Como posso fazer isso em C ++? Se não for realmente possível, então qual é a melhor maneira de criar uma função em C ++ que tenha uma coleção como um parâmetro, mas que não precisa saber qual é o tipo exato de coleção?

Termo aditivo

Obrigado pelas respostas. Além das respostas, encontrei algumas boas informações sobre isso no parágrafo 7.5 (Iterator Traits) do livroA biblioteca padrão do C ++: um tutorial e uma referência (por Nicolai M. Josuttis). O parágrafo 7.5.1 explica como escrever versões especializadas de funções para diferentes categorias de agentes iteradores.

questionAnswers(4)

yourAnswerToTheQuestion