Por que há uma separação de algoritmos, iteradores e contêineres em C ++ STL?

Não consigo descobrir por que eles separaram algoritmos, iteradores e contêineres em C ++ STL. Se é um uso pesado de modelos em todos os lugares, então podemos ter classes com todas as coisas em um só lugar com parâmetros de modelo.

Algum texto que obtive explica que os iteradores ajudam os algoritmos a interagir com os dados dos contêineres, mas e se os contêineres expuserem algum mecanismo para acessar os dados que possuem?

questionAnswers(1)

yourAnswerToTheQuestion