This module focusses three main learning goal:

  1. You know how to program with modern C++, using generic programming and advanced techniques, like meta programming, expression templates, and concepts. (70%)
  2. You know how to use programming tools and you can apply these tools to debug, benchmark, and manage your code. The list of tools include compilers, build systems, version control, debuggers, and profilers. (20%)
  3. You can read, understand, and utilize (scientific) software libraries, like STL (Standard template library), Dune (framework for the discretization of partial differential equations), MTL4 (Matrix Template Library), Boost (portable C++ library). (10%)

There are exercises every week to practice the C++ programming. During the semester programming projects can be selected. These will be corrected and hints for the following programming tasks will be given.

Time and Room

Seminar: Thursday 2.DS in room WIL/B221
Lecture: Wednesday 4.DS in room WIL/A124

The lectures may be given in english on request.

Excercises

Excercise Date Topics
practice sheet 1 2017-10-12 preliminary execise to GIT and C++
practice sheet 2 2017-10-19 datatypes and loops
practice sheet 3 2017-10-26 pointer, references and memory allocation
practice sheet 4 2017-11-02 operators and functions
practice sheet 5 2017-11-09 overloading, name lookup, GotW
practice sheet 6 2017-11-16 class definition
practice sheet 7 2017-11-23 templates, classes and functions
practice sheet 8 2017-11-30 template specialization
practice sheet 9 2017-12-07 functors, iterators, and containers

Lecture material and exercises

Exercise sheets and lecture notes/material will be available in an online repository for this module, hosted on the TU-webservice Fusionforge. Please login to the site first and then submit your username/login (ZIH-login) to the tutor or by mail to simon.praetorius@tu-dresden.de. You will be added to the module project on Fusionforge. (More details about this in the first tutorial)

Bibliography

  • Online-References: cppreference.com
  • Discovering Modern C++: An Intensive Course for Scientists, Engineers, and Programmers, Peter Gottschling, 2015 [slub, online]
  • References: Die C++ Programmiersprache (Bjarne Stroustrup), C++ Kurz & Gut (Kyle Loudon, Rainer Grimm) [slub]
  • Beginners: C++ Primer (Stanley Lippman, Josee Lajoie, Barbara E. Moo) [online]
  • Intermediate level: Effective Modern C++ (Scott Meyers) [slub, online], C++ Templates: The Complete Guide (David Vandevoorde, Nicolai M. Josuttis) [online]
  • Experts: Modern C++ Design (Andrei Alexandrescu) [online], C++ Template Metaprogramming (David Abrahams, Aleksey Gurovoy) [online]

Software

  • Dune - the Distributed and Unified Numerics Environment
  • MTL4 - Matrix Template Library, elegant and efficient linear algebra expressions in C++
  • Boost - Boost provides free peer-reviewed portable C++ source libraries.
  • AMDiS - adaptive multidimensional simulation toolbox, developed at the Institut für Wissenschaftliches Rechnen, TU-Dresden