нужен совет программистов!
Это одно из применений шаблонов, да. Мы избегаем повторного написания функции для всех типов , которые мы используем. Вместо этого мы пишем одну шаблонную функцию, а компайлер за нас инстанциирует (то бишь генерирует) эту функцию для используемых нами типов.
Ещё одно использование - параметризация функции. Пример (здесь мы с помощью шаблона параметризуем размер используемого массива):
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
