\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{ReneD} \pdfinfo{ /Title (c.pdf) /Creator (Cheatography) /Author (ReneD) /Subject (C++ Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{A3A3A3} \definecolor{LightBackground}{HTML}{F3F3F3} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{C++ Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{ReneD} via \textcolor{DarkBackground}{\uline{cheatography.com/69308/cs/17500/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}ReneD \\ \uline{cheatography.com/rened} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 18th October, 2018.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{2} \begin{tabularx}{8.4cm}{p{1.04 cm} x{6.96 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{Pointer}} \tn % Row 0 \SetRowColor{LightBackground} \&b & Rufe die Informationen auf die b zeigt ab. \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} *a = b & Speicher die Speichernummer für die Daten in b in der Variablen a ab. \tn % Row Count 5 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{Pointer werden ben{\"o}tigt, um z.B. auf Daten schneller zuzugreifen, oder um Methodenaufrufe mit Arrays zu realisieren.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{3.68 cm} x{4.32 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{Heap vs Stack}} \tn % Row 0 \SetRowColor{LightBackground} int *a = new int{[}10{]}; & (Heap) Erstelle einen Pointer, der auf das erste Element eines Int-Arrays gesetzt ist und reserviere für das Array 10 Int-Speicherpl{\"a}tze (32Bit/4Byte) ab. \tn % Row Count 8 (+ 8) % Row 1 \SetRowColor{white} int *a = new int{[}10{]}(); & (Heap) Erstelle einen Pointer, der auf das erste Element eines Int-Arrays gesetzt ist und reserviere für das Array 10 Int-Speicherpl{\"a}tze (32Bit/4Byte) ab und überschreibe die bisher eingetragen Daten mit einer Null... Der Pointer wird entfernt, aber das Array bleibt erhalten (Memory Leak) \tn % Row Count 22 (+ 14) % Row 2 \SetRowColor{LightBackground} del {[}{]} a; & L{\"o}sche das Array a. \tn % Row Count 23 (+ 1) % Row 3 \SetRowColor{white} int s{[}10{]} = \{1,2,3,4,5,6,7,8,9,0\}; & (Stack) Erstelle ein Array, das die ELemente ... enth{\"a}lt. Dieses Array wird gel{\"o}scht sobald die Funktion ausgeführt wurde. \tn % Row Count 29 (+ 6) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{Im Stack werden die Informationen nur im Arbeitsspeicher gespeichert. Dies führt zwar zu einer schnelleren übermittlung der Daten, hat aber den Nachteil das das das Datenvolumen stark begrenzt ist. Dem ggü. kann im Heap eine gr{\"o}{\ss}ere Datenmenge gespeichert werden.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{3.76 cm} x{4.24 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{C-String/C++-String}} \tn % Row 0 \SetRowColor{LightBackground} std::string a = "MAX" & (C++ String) Speicher den String MAX zurück \tn % Row Count 3 (+ 3) % Row 1 \SetRowColor{white} char name{[}4{]} = "MAX" & (C String) Speicher das Char-Array + die Abbruchbedingung (\textbackslash{}0) \tn % Row Count 6 (+ 3) % Row 2 \SetRowColor{LightBackground} void doSomething (char *name)\{ ...\} & Übergebe von dem Array(oder sonst einen char Pointer) die Adresse und führe die Fkt aus. \tn % Row Count 11 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{Strings gab es in C noch nicht. Stattdessen k{\"o}nnen Strings auch als Arrays interpretiert werden. Als Array von Buchstaben. Das Problem ist allerdings wir k{\"o}nnen das Array nicht einer Funktion übergeben. -\textgreater{} Pointer und L{\"a}nge des Array wird ben{\"o}tigt. \newline L{\"o}sung -\textgreater{} Am Ende des Strings wird ein {\bf{\textbackslash{}0}} ausgegeben. Man ben{\"o}tigt dann nur noch den Pointer, da \textbackslash{}0 die Abbruchbedingung darstellt. \newline In C++ wurde dann der "richtige" String eingeführt: -\textgreater{} std::string a = "ABC"} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{p{0.8 cm} p{0.8 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{Pointer vs Referenz}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{Pointer: void doSomething(int *a) \{...\}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{2}{x{8.4cm}}{Referenz: void doSomething(const vector\textless{}int\textgreater{} \&a) \{...\}} \tn % Row Count 3 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{Pointer und Referenz k{\"o}nnen beide genutzt werden um eine Funktion zu übergeben, ohne das eine Kopie erstellt wird. Beide werden intern als Speicheradresse repr{\"a}sentiert (bei Ponter vorgegeben, bei Referenzen sinnvoll). \newline \newline Pointer werden für C-Array ben{\"o}tigt. K{\"o}nnen mit einen +1 (a = a + 1) auf dem n{\"a}chsten Eintrag zugreifen. (Gro{\ss}es Problem) \newline \newline Referenzen stellen weniger Fkten als ein Pointer zur Verfügung. Repr{\"a}sentiert aber direkt ein ganzes Objekt. (Sehr komfortabel)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}