нужен совет программистов!
Это одно из применений шаблонов, да. Мы избегаем повторного написания функции для всех типов , которые мы используем. Вместо этого мы пишем одну шаблонную функцию, а компайлер за нас инстанциирует (то бишь генерирует) эту функцию для используемых нами типов.
Ещё одно использование - параметризация функции. Пример (здесь мы с помощью шаблона параметризуем размер используемого массива):
template< size_t N > // optimal N = 16-128K std::string load_file( const char* filename ) { std::ifstream ifs( filename, std::ios::binary | std::ios::in ); std::tr1::array< char, N > buffer; std::string s; ifs.seekg( 0, std::ios::end ); s.reserve( ifs.tellg() ); ifs.seekg( 0 ); while( ifs ) { ifs.read( buffer.data(), buffer.size() ); s.append( buffer.data(), ifs.gcount() ); } return s; }
Ещё одно использование - вывод типов, но это такие дебри куда новичку лучше не лезть. В С++ отсутствует рефлексия, поэтому шаблонами злоупотребили для получения разной информации о типах... Более того, даже целый парсер-генератор накатали на шаблонах. Это прикольно, но тоже не для новичков.
А что касается алгоритмов, вот есть хорошая книжка по соревновательному программированию, там рассмотрены большинство существующих алгоритмов http://vandoren.strana.germany.ru/cp3.pdf