All patterns

Algorithms

Copy a range of elements

Requires c++11 or newer

Copy elements from a range to another range or container.

Count occurrences of value in a range

Requires c++98 or newer

Count the number of occurrences of a particular value in a range of elements.

Sort a range of elements

Requires c++11 or newer

Sort elements in a range into a given order.

Swap containers

Requires c++98 or newer

Swap the contents of two containers.

Swap values

Requires c++98 or newer

Swap the values of two objects.

Classes

Copy-and-swap

Requires c++11 or newer

Implement the assignment operator with strong exception safety.

Delegate behavior to derived classes

Requires c++98 or newer

Delegate behavior to derived classes without incurring the cost of run-time polymorphism.

Lexicographic ordering

Requires c++11 or newer

Implement a lexicographic ordering over class members.

Non-member non-friend interfaces

Requires c++98 or newer

Reduce dependencies on internal class details and improve encapsulation.

The PIMPL idiom

Requires c++11 or newer

Remove compilation dependencies on internal class implementations and improve compile times.

The rule of five

Requires c++11 or newer

Safely and efficiently implement RAII to encapsulate the management of dynamically allocated resources.

The rule of zero

Requires c++98 or newer

Utilise the value semantics of existing types to avoid having to implement custom copy and move operations.

Virtual constructor

Requires c++11 or newer

Create a copy of an object through a pointer to its base type.

Concurrency

Create a thread

Requires c++11 or newer

Execute code on a separate thread.

Execute a task asynchronously

Requires c++11 or newer

High-level asynchronous execution of tasks.

Pass values between threads

Requires c++11 or newer

Use promises to communicate values between threads.

Containers

Check existence of a key

Requires c++11 or newer

Check if a particular key is in an associative container.

Remove elements from a container

Requires c++11 or newer

Use the erase-remove idiom to remove elements from a container.

Functions

Apply tuple to a function

Requires c++14 or newer

Unpack a tuple as the arguments of a function.

Optional arguments

Requires c++17 or newer

Allow argument values to be omitted when calling a function.

Pass arrays

Requires c++11 or newer

Pass fixed-size arrays to and from functions.

Return multiple values

Requires c++11 or newer

Return multiple values of different types from a function.

Input streams

Read line-by-line

Requires c++98 or newer

Process the contents of an input stream line-by-line.

Read a line of values

Requires c++98 or newer

Read a sequence of delimited values from a single line of an input stream into a standard container.

Validate multiple reads

Requires c++98 or newer

Ensure that multiple stream reads are successful before using the extracted values.

Memory management

Shared ownership

Requires c++11 or newer

Share ownership of a dynamically allocated object with another unit of code.

Unique ownership

Requires c++11 or newer

Transfer unique ownership of a dynamically allocated object to another unit of code.

Use RAII types

Requires c++98 or newer

Avoid manual memory management to improve safety and reduce bugs and memory leaks.

Weak reference

Requires c++11 or newer

Maintain a non-owning reference to a shared dynamically allocated object to break circular dependencies.

Output streams

Overload operator<<

Requires c++98 or newer

Write your class type objects to an output stream.

Write data in columns

Requires c++98 or newer

Align data in columns when writing to an output stream.

Random number generation

Choose a random element

Requires c++11 or newer

Choose a random element from a container.

Flip a biased coin

Requires c++11 or newer

Generate a random boolean value according to a bernoulli distribution.

Roll a die

Requires c++11 or newer

Generate a random integer according to a uniform distribution.

Unpredictable random numbers

Requires c++11 or newer

Seed a random number engine with greater unpredictability.

Ranges

Range-based algorithms

Requires c++11 or newer

Implement algorithms that can be applied to any generic range of elements.

Range iteration

Requires c++11 or newer

Iterate over a range of elements without using iterators or indices.

Templates

Class template SFINAE

Requires c++11 or newer

Conditionally instantiate a class template depending on the template arguments.

Function template SFINAE

Requires c++11 or newer

Conditionally instantiate a function template depending on the template arguments.

Perfect forwarding

Requires c++11 or newer

Forward arguments of one function to another as though the wrapped function had been called directly.

Time

Fixed time step

Requires c++11 or newer

Block the execution of a thread until a fixed point in time.

Measure execution time

Requires c++98 or newer

Measure the execution time of a unit of code.

Sleep

Requires c++11 or newer

Block the execution of a thread for a given amount of time.

Behavioral

Observer

Requires c++11 or newer

Notify generic observer objects when an event occurs.

Visitor

Requires c++98 or newer

Separate generic algorithms from the elements or structure on which they operate.

Creational

Builder

Requires c++98 or newer

Separate the complex construction of an object from its representation.

Decorator

Requires c++98 or newer

Extend the functionality of a class.

← All patterns

Search Results