\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{eskimobrand} \pdfinfo{ /Title (cpp.pdf) /Creator (Cheatography) /Author (eskimobrand) /Subject (CPP 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{CPP Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{eskimobrand} via \textcolor{DarkBackground}{\uline{cheatography.com/71842/cs/18220/}}} \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}eskimobrand \\ \uline{cheatography.com/eskimobrand} \\ \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 10th December, 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*}{3} \begin{tabularx}{5.377cm}{x{2.88666 cm} x{2.09034 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{lvalue vs rvalue}} \tn % Row 0 \SetRowColor{LightBackground} object that persists beyond a single expression & temporary value \tn % Row Count 3 (+ 3) % Row 1 \SetRowColor{white} has an address & has no address \tn % Row Count 4 (+ 1) % Row 2 \SetRowColor{LightBackground} variable that has a name/const & increment, decrement \tn % Row Count 6 (+ 2) % Row 3 \SetRowColor{white} class members & ternary operator \tn % Row Count 7 (+ 1) % Row 4 \SetRowColor{LightBackground} strong literal & func call like `std::move(x)` \tn % Row Count 9 (+ 2) % Row 5 \SetRowColor{white} \& to reference & \&\& to ref \tn % Row Count 10 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Statics}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{//Only one copy per class, single resouce can be shared between instances, cant be initialized inside class def'n \newline // static const: can be initialized with an initializer \newline // static constexpr: MUST be initialized with an initializer \newline class X \{ \newline static int m=5 //err \newline static in n; //ok \newline const static int p\{5\}; \newline constexpr static int arr{[}{]}=\{1,3\}; \newline \} \newline int X::n=5; //ok} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Move}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{takes ownership of member variables from another obj} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{faster and avoid mem alloc (unlike copy const'r)} \tn % Row Count 3 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{shallow copy} \tn % Row Count 4 (+ 1) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{move assignment does similar} \tn % Row Count 5 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{special\_ptr}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{class name \{ \newline public: \newline name(const char{\emph{ s):data\{s\}\{ \}; \newline void display\_name() \{ cout \textless{}\textless{} data;\} \newline \textasciitilde{}name() \{\} \newline private: \newline string data; \newline \}; \newline void modify\_name(name}} m) \{ \} \newline int main() \{ \newline unique\_ptr\textless{}name\textgreater{} ptr1(new name("D")); \newline //Can use -\textgreater{} (and *) on unique\_ptr \newline ptr1-\textgreater{}display\_name(); \newline // To get raw ptr use get() method \newline \seqsplit{modify\_name(ptr1.get());} \newline // Use std::move to transfer \newline unique\_ptr\textless{}name\textgreater{} ptr2(std::move(ptr1)); \newline // assign a new pointer to ptr1 \newline ptr1.reset(new name("H")); \newline // assign a new pointer to ptr2 \newline // D now auto deleted \newline ptr2.reset(new name("S")); \newline \newline //Use make\_shared\textless{}T\textgreater{} func to create shared\_ptr \newline auto ptr = make\_shared\textless{}name\textgreater{}("K"); \newline //ptr and anotherPtr point to K \newline shared\_ptr\textless{}name\textgreater{} sptr2=ptr; \newline cout\textless{}\textless{}ptr.use\_count()\textless{}\textless{}"\textbackslash{}n"; \newline // ptr switch to D, K \newline // not deleted sptr2 still holding \newline ptr.reset(new name("D")); \newline // S deleted at the end of \newline // this func, ptr2 out of scope \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{6 std member functions}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{default constructor `C();`} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{copy c'tor `C(const C\&);`} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{copy-assign `C\& operator=(const C\&);`} \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{destructor `\textasciitilde{}C();`} \tn % Row Count 4 (+ 1) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{move c'tor `C(C\&\&);`} \tn % Row Count 5 (+ 1) % Row 5 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{move assign `C\& operator=(C\&\&)`} \tn % Row Count 6 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Insertion Operator}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{friend ostream\& operator\textless{}\textless{}(ostream\& os, const class\& c);} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Add Functor}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{struct add\_x \{ \newline add\_x(int x) : x(x) \{\} \newline int operator()(int y) const \{ return x + y; \} \newline private: \newline int x; \newline \}; \newline // Now you can use it like this: \newline add\_x add42(42); // create an instance \newline int i = add42(8); // and "call" it \newline assert(i == 50);} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Templates}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{template \textless{}typename T\textgreater{} // Function \newline T get\_max(T a, T b) \{ \newline return (a \textgreater{} b ? a : b); \newline \} \newline double max = get\_max\textless{}double\textgreater{}(m, n); \newline // set default type by setting K=string or V=25 \newline template \textless{}typename K, typename V\textgreater{} \newline class Entry\{ //Class \newline K key; \newline V value; \newline public: \newline Entry(K key, V value) : key\{key\}, value\{value\}\{\} \newline \}; \newline // Generic Copy Template \newline template\textless{}typename InIter, typename OutIter\textgreater{} \newline OutIter copy(InIter init,InIter end,OutIter res)\{ \newline while(init!=end)\{ \newline {\emph{res++ = }}init++; \} \newline return res;\}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{diff between ref and pointer}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{pointer can be null} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{pointer can be reassigned} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{can get address of pointer} \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{pointers can iterate over array} \tn % Row Count 4 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Dynamic cast}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{casts a ptr of one type to a ptr of another type within an inheritance hierarchy} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{allows with ptrs and ref to polymorphic types (must contain virtual func)} \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{returns nullptr on failure} \tn % Row Count 5 (+ 1) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{`dynamic\_cast\textless{}target\_type\textgreater{}(variable)`} \tn % Row Count 6 (+ 1) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{const cast has same syntax and is used to cast away const qualifier} \tn % Row Count 8 (+ 2) % Row 5 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{static cast has same syntax, works on nonpolymorphic types, only works if 1 or both types can be implicitly converted} \tn % Row Count 11 (+ 3) % Row 6 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{slicing happens when casting non ref or ptrs, it is when a derived class loses functionality} \tn % Row Count 13 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Common Functions}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{//swap \newline void swap(class\& lhs, class\& rhs)\{ \newline std::swap(lhs.mem, rhs.mem);\} \newline //assignment operator \newline class\& class::operator=(class other)\{ \newline swap({\emph{this, other); \newline return }}this;\}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{unique\_ptr}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Template, wraps a 'raw' pointer} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Ensures pointer is deleted on destruction} \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Auto deletes the obj it is storing when: Destroyed(OOS), Value changes by assignment, Value changes by call to reset func} \tn % Row Count 5 (+ 3) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{cannot be shared or copied} \tn % Row Count 6 (+ 1) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{use for class data members and local variables in functions} \tn % Row Count 8 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Lambda}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{//Capture clause used to pass variables from surrounding scope into lambda \newline //{[}{]} no capturing, {[}={]} outside captured by val cannot be modified, {[}\&{]} outside captured by reference, {[}var{]} only var captured val, {[}\&var{]} only var captured by ref \newline //ascending sort lambda \newline auto asc = {[}{]}(const int\& a, const int\& b)\{return a \textless{} b;\}; \newline std::sort(vector.begin(), vector.end(), asc); \newline //ascending sort functor \newline struct ascSort \{ \newline bool operator()(const int\& a, const int\& b) \newline return a \textless{} b; \newline \};} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Singleton}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{class singleton\{ \newline public: \newline static singleton\& get\_instance()\{ \newline //Guaranteed to be destroyed. \newline static singleton instance; \newline return instance;//Instantiated on first use. \newline \} \newline private: \newline int test\_value; \newline singleton() \{\} \newline public: \newline singleton(singleton const\&) = delete; \newline void operator=(singleton const\&) = delete; \newline int get\_value() \{ return test\_value++; \} \newline \}; \newline int main()\{ \newline // singleton s;//wont compile \newline cout\textless{}\textless{}singleton::get\_instance().get\_value(); //ok;\}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.44333 cm} x{3.53367 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Java enum vs C++ enum}} \tn % Row 0 \SetRowColor{LightBackground} like a class & treated as an int \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} can have methods & can be assigned values (even same values) \tn % Row Count 4 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}