BERGISCHE UNIVERSIT ¨ AT WUPPERTAL
GAUSS-STRASSE 20 42119 WUPPERTAL TELEFAX (0202) 439-2901 TELEFON (0202) 439-0 WWW www.uni-wuppertal.de
Fachbereich C
MATHEMATIK UND NATURWISSENSCHAFTEN Fachgruppe Mathematik und Informatik
Generische Programmierung
(Spezielle Kapitel der praktischen Informatik)
WS 2012/2013 – ¨ Ubungsblatt 7 6. Dezember 2012
Abgabe: bis 13. Dezember 2012 an Farzin.Ghorban@studs.math.uni-wuppertal.de
Prof. Dr. Hans-J¨urgen Buhl Praktische Informatik / Numerik
E-Mail:Hans-Juergen.Buhl@math.uni-wuppertal.de
WWW:http://www.math.uni-wuppertal.de/∼buhl
Aufgabe 1. promote trait
Benutzen Sie das Template promote trait in einer Templatefunktion my_min und testen Sie es f¨ur mindestens 10 unterschiedliche Typpaare.
Schreiben Sie ein ¨ahnliches Template arithAverage trait zur Nut- zung in einer Templatefunktion arithAverage(T x, T y) zweier nu- merischer skalarer Parameter. Der Ergebnistyp f¨ur T = int soll dabei jedoch double sein (warum?). Welche Konzepte sollte T modellieren?
Aufgabe 2. non-type template-Parameter Warum funktioniert:
#include <i o st r ea m>
using namespace s t d ;
template <bool k> void p r i n t ( ) {
i f( k==true) // o d e r auch : i f ( k ) co ut << ” t r u e ” << e n d l ;
e l s e
co ut << ” f a l s e ” << e n d l ; return;
}
i n t main ( ) {
p r i n t<7>();
p r i n t<0>();
1
return 0 ; }
Wie viele und welche Inkarnationen der Templatefunktion print() werden automatisch erzeugt?
Welche Regeln gelten f¨ur die Typ-Transformation von non- type Funktionstemplate-Parametern uber¨ diejenigen der type Funktionstemplate-Parameter hinaus?
Erg¨anzen Sie in main() Aufrufe von print<8>(); print<9>(); ...
Was erwarten Sie? ¨Uberpr¨ufen Sie Ihre Erwartungen durch Benutzung von nm.
Aufgabe 3. Template-Funktion mit array-Parametern Vergleichen Sie
#include <i o st r ea m>
#include <numeric>
template <typename Type>
Type sum ( Type ∗tp , s i z e t n ) {
return s t d : : accumulate ( tp , tp+n , Type ( ) ) ; }
i n t main ( ) {
i n t x [ 1 0 ] ;
f o r(i n t l = 0 ; l < 1 0 ; l ++) x [ l ] = l ;
s t d : : co ut << sum ( x , 1 0 ) << s t d : : e n d l ; return( 0 ) ;
} mit
#include <i o st r ea m>
#include <numeric>
template <typename Type , s i z e t n>
Type sum (const Type (&tp ) [ n ] ) {
return s t d : : accumulate ( tp , tp+n , Type ( ) ) ; }
2
i n t main ( ) {
i n t x [ 1 0 ] ;
f o r(i n t l = 0 ; l < 1 0 ; l ++) x [ l ] = l ;
s t d : : co ut << sum ( x ) << s t d : : e n d l ; return( 0 ) ;
}
Welche Vor- und Nachteile bietet die erste Variante gegen¨uber der zweiten? Schreiben Sie eine Template-Funktion unsigned int get size(.), die die Anzahl der Komponenten eines ¨ubergebenen Ar- rays als Funktionsergebnis liefert.
Aufgabe 4. InputIterator
Beschreiben Sie umgangssprachlich in eigenen Worten die einzelnen Requirements des Konzepts InputIterator in Iterator-Concepts.
Welche Konzepte m¨ussen die dem Iterator assoziierten Typen model- lieren? Skizzieren Sie die Verfeinerungshierarchie aller Iteratoren.
3