C++ Cheat Sheet

Basics & Syntax

A basic C++ program includes headers, uses the standard namespace, and defines the main function as the entry point.

#include <iostream>
using namespace std;

int main() {
  cout << "Hello, World!" << endl;
  return 0;
}

Data Types

int a = 10;
float b = 5.5;
double c = 3.14;
char d = 'A';
bool e = true;

Variables & Constants

int age = 30;
const float PI = 3.1415;

Input/Output (cin, cout)

int x;
cout << "Enter a number: ";
cin >> x;
cout << "You entered: " << x;

Operators (Arithmetic, Logical, Bitwise, etc.)

Arithmetic operators perform basic mathematical operations:

int a = 10, b = 3;
int sum = a + b;
int diff = a - b;
int prod = a * b;
int quot = a / b;
int mod = a % b;

Relational operators compare two values and return a boolean result:

bool eq = (a == b);
bool neq = (a != b);
bool gt = (a > b);
bool lt = (a < b);
bool ge = (a >= b);
bool le = (a <= b);

Logical operators are used to combine or invert boolean expressions:

bool and_op = (a > 0) && (b < 5);
bool or_op = (a > 0) || (b < 0);
bool not_op = !(a == b);

Bitwise operators operate on individual bits of integer types:

int and_bit = a & b;
int or_bit = a | b;
int xor_bit = a ^ b;
int not_bit = ~a;
int left_shift = a << 1;
int right_shift = a >> 1;

Assignment operators assign and update values:

int x = 5;
x += 3;
x -= 2;
x *= 4;
x /= 2;
x %= 3;

Increment and decrement operators increase or decrease a value by 1:

int i = 0;
i++;
++i;
i--;
--i;

Conditional (ternary) operator provides shorthand for if-else:

int max = (a > b) ? a : b;

Scope resolution operator accesses global or class members:

::std::cout << "Hello";

Pointer and reference operators access memory and refer to variables:

int y = 10;
int* ptr = &y;
int& ref = y;
std::cout << *ptr << " " << ref;

Control Flow (if, else, switch)

Simple if condition:

int x = 5;
if (x > 0) {
  std::cout << "x is positive";
}

if-else condition:

int x = -3;
if (x >= 0) {
  std::cout << "x is non-negative";
} else {
  std::cout << "x is negative";
}

if-else if-else chain for multiple conditions:

int x = 0;
if (x > 0) {
  std::cout << "Positive";
} else if (x == 0) {
  std::cout << "Zero";
} else {
  std::cout << "Negative";
}

switch statement for handling multiple discrete values:

int x = 2;
switch (x) {
  case 1:
    std::cout << "One";
    break;
  case 2:
    std::cout << "Two";
    break;
  default:
    std::cout << "Other";
}

Loops (for, while, do-while)

for (int i = 0; i < 5; i++) {
  cout << i << " ";
}

int j = 0;
while (j < 5) {
  cout << j++ << " ";
}

do {
  cout << j-- << " ";
} while (j > 0);

Functions

int add(int a, int b) {
  return a + b;
}

Function Overloading

Function overloading allows multiple functions with the same name but different parameter types or counts.

int add(int a, int b) {
  return a + b;
}

double add(double a, double b) {
  return a + b;
}

Default Arguments

void greet(string name = "Guest") {
  cout << "Hello, " << name << endl;
}

Recursion

int factorial(int n) {
  if (n == 0) return 1;
  return n * factorial(n - 1);
}

Pointers

Basic pointer usage for storing and accessing the address of a variable:

int x = 10;
int* ptr = &x;
cout << *ptr; // Output: 10

References

A reference is an alias for an existing variable. Changing the reference updates the original value.

int x = 5;
int& ref = x;
ref = 10;
cout << x; // prints 10

Arrays

Declare and initialize a fixed-size array:

int arr[3] = {1, 2, 3};

Access elements using indexing:

cout << arr[0];

Iterate through array elements using a for loop:

for (int i = 0; i < 3; i++) {
  cout << arr[i] << " ";
}

Update a value in the array:

arr[1] = 10;

Calculate the size of an array:

int size = sizeof(arr) / sizeof(arr[0]);
cout << "Size: " << size;

Initialize all elements with zeros:

int arr[5] = {0};

Use range-based for loop (C++11+):

for (int x : arr) {
  cout << x << " ";
}

Strings (C-style and std::string)

C-style string initialization and output:

#include <cstdio>

char name[] = "C-style";
printf("%s
", name);

Initializing and printing a std::string:

#include <iostream>
#include <string>
using namespace std;

string modern = "C++ string";
cout << modern << endl;

Getting the length of a std::string:

cout << modern.length() << endl;

Concatenating two strings:

string first = "Hello, ";
string second = "world!";
string result = first + second;
cout << result << endl;

Accessing characters in a string:

string word = "example";
cout << word[0] << " " << word.at(1) << endl;

Substring extraction:

string text = "abcdef";
string sub = text.substr(1, 3);  // "bcd"
cout << sub << endl;

Finding a substring:

string text = "find the word";
size_t pos = text.find("word");
cout << pos << endl;

Comparing strings:

string a = "apple";
string b = "banana";
if (a < b) {
  cout << "apple comes first" << endl;
}

Converting between C-style and std::string:

string str = "sample";
const char* cstr = str.c_str();

Structures (struct)

Structures allow grouping of different data types into a single unit.

struct Person {
  std::string name;
  int age;
};

Person p = {"Alice", 30};
std::cout << p.name << " is " << p.age << " years old.";

Unions

A union is a user-defined type where all members share the same memory location. Only one member can hold a value at any given time.

union Data {
  int i;
  float f;
};

int main() {
  Data d;
  d.i = 10;
  printf("d.i = %d
", d.i);
  return 0;
}

Enumerations (enum)

Enums define a set of named integer constants for better code readability and maintainability:

enum Color { RED, GREEN, BLUE };
Color c = GREEN;

Dynamic Memory (new, delete)

Allocate and deallocate a single integer using new and delete:

int* p = new int;
*p = 100;
delete p;

Allocate and deallocate a dynamic array using new[] and delete[]:

int* arr = new int[5];
arr[0] = 10;
delete[] arr;

Classes and Objects

class Animal {
public:
  void speak() {
    cout << "Sound";
  }
};

Animal a;
a.speak();

Constructors and Destructors

class MyClass {
public:
  MyClass() {
    cout << "Constructor";
  }
  ~MyClass() {
    cout << "Destructor";
  }
};

Access Specifiers (public, private, protected)

class Test {
private:
  int secret;
public:
  void set(int s) { secret = s; }
};

Inheritance

class Animal {
public:
  void speak() { cout << "Animal"; }
};

class Dog : public Animal {};

Polymorphism (Virtual Functions, Override)

class Base {
public:
  virtual void show() { cout << "Base"; }
};

class Derived : public Base {
public:
  void show() override { cout << "Derived"; }
};

Abstract Classes & Interfaces

class Shape {
public:
  virtual void draw() = 0; // pure virtual
};

Operator Overloading

class Complex {
  int real, imag;
public:
  Complex(int r, int i) : real(r), imag(i) {}
  Complex operator + (const Complex& obj) {
    return Complex(real + obj.real, imag + obj.imag);
  }
};

Friend Functions and Classes

class Box {
  int width;
  friend void printWidth(Box);
};

Namespaces

namespace ns {
  void func() { cout << "Namespace"; }
}

ns::func();

Exception Handling (try, catch, throw)

try {
  throw 20;
} catch (int e) {
  cout << "Exception: " << e;
}

STL (Standard Template Library)

Includes containers, algorithms, and iterators. Examples: vector, map, set, queue, stack.

STL: Vectors

#include <vector>
vector<int> v = {1, 2, 3};
v.push_back(4);
for (int x : v) cout << x << " ";

STL: Maps & Unordered Maps

#include <map>
map<string, int> m;
m["age"] = 30;
cout << m["age"];

STL: Sets & Unordered Sets

#include <set>
set<int> s;
s.insert(1);
s.insert(2);
for (int x : s) cout << x;

STL: Queues, Stacks, Deques

#include <queue>
queue<int> q;
q.push(10);
q.pop();

STL: Algorithms (sort, find, etc.)

#include <algorithm>
vector<int> v = {3, 1, 2};
sort(v.begin(), v.end());

Templates (Function & Class Templates)

template <typename T>
T add(T a, T b) {
  return a + b;
}

Lambda Functions

auto sum = [](int a, int b) { return a + b; };
cout << sum(3, 4);

File I/O (ifstream, ofstream, fstream)

#include <fstream>
ofstream out("file.txt");
out << "Hello";
out.close();

Type Casting (static_cast, dynamic_cast, etc.)

double d = 3.5;
int i = static_cast<int>(d);

Preprocessor Directives (#define, #include, etc.)

#define PI 3.14
#include <iostream>

Const & Mutable

class Example {
  mutable int x;
public:
  void set(int val) const {
    x = val; // allowed
  }
};

Inline Functions

inline int square(int x) {
  return x * x;
}

Smart Pointers (unique_ptr, shared_ptr, weak_ptr)

#include <memory>
auto ptr = std::make_shared<int>(10);

Move Semantics & Rvalue References

vector<int> a = {1, 2};
vector<int> b = std::move(a);

C++11/C++14/C++17/C++20 Features Overview

  • C++11: auto, nullptr, lambda, range-for, smart pointers
  • C++14: binary literals, generic lambdas
  • C++17: if constexpr, structured bindings
  • C++20: concepts, ranges, coroutines
Mallikarjuna Mallisetty, author
About the author

Mallikarjuna Mallisetty

General programming

Mallikarjuna shares practical programming tutorials and foundational concepts designed to help developers learn by building and experimenting.

View LinkedIn profile ↗