03.12.2012 Views

C++ for Scientists - Technische Universität Dresden

C++ for Scientists - Technische Universität Dresden

C++ for Scientists - Technische Universität Dresden

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

4 CONTENTS<br />

4.3 Generic classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95<br />

4.4 Concepts and Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97<br />

4.5 Inheritance or Generics? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99<br />

4.6 Template Specialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101<br />

4.7 Non-Type Parameters <strong>for</strong> Templates . . . . . . . . . . . . . . . . . . . . . . . . . 109<br />

4.8 Functors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111<br />

4.9 STL — The Mother of All Generic Libraries . . . . . . . . . . . . . . . . . . . . . 121<br />

4.10 Cursors and Property Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123<br />

4.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128<br />

5 Meta-programming 133<br />

5.1 Let the Compiler Compute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134<br />

5.2 Providing Type In<strong>for</strong>mation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135<br />

5.3 Expression Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150<br />

5.4 Meta-Tuning: Write Your Own Compiler Optimization . . . . . . . . . . . . . . . 156<br />

5.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185<br />

6 Inheritance 187<br />

6.1 Basic Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />

6.2 Dynamic Selection by Sub-typing . . . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />

6.3 Remove Redundancy With Base Classes . . . . . . . . . . . . . . . . . . . . . . . 189<br />

6.4 Casting Up and Down and Elsewhere . . . . . . . . . . . . . . . . . . . . . . . . . 189<br />

6.5 Barton-Nackman Trick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193<br />

7 Effective Programming: The Polymorphic Way 199<br />

7.1 Imperative Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201<br />

7.2 Generic Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203<br />

7.3 Programming with Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206<br />

7.4 Functional Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />

7.5 From Monomorphic to Polymorphic Behavior . . . . . . . . . . . . . . . . . . . . 212<br />

7.6 Best of Both Worlds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221<br />

II Using <strong>C++</strong> 223<br />

8 Finite World of Computers 225<br />

8.1 Mathematical Objects inside the Computer . . . . . . . . . . . . . . . . . . . . . 225<br />

8.2 More Numbers and Basic Structure . . . . . . . . . . . . . . . . . . . . . . . . . . 226<br />

8.3 A Loop and More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230<br />

8.4 The Other Way Around . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231<br />

9 How to Handle Physics on the Computer 233<br />

9.1 Finite Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233<br />

9.2 Again, Integrators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234<br />

10 Programming tools 235<br />

10.1 GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235<br />

10.2 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236<br />

10.3 Valgrind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239<br />

10.4 Gnuplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!