Skip to content

C++ Standard Library

The C++ Standard Library is a powerful collection of pre-written classes and functions that significantly simplifies development by providing ready-to-use components for common programming tasks.

It can be broadly categorized into several key areas:

The heart of the C++ Standard Library. It provides generic, efficient, and reusable components based on C++ templates. The STL primarily consists of:

  • Containers: Classes that manage collections of objects. Examples include:
  • Sequence Containers: std::vector (dynamic array), std::deque (double-ended queue), std::list (doubly-linked list), std::forward_list (singly-linked list, C++11), std::array (fixed-size array, C++11).
  • Associative Containers: std::set (sorted unique keys), std::map (sorted key-value pairs), std::multiset (sorted non-unique keys), std::multimap (sorted non-unique key-value pairs).
  • Unordered Associative Containers (Hash Tables, C++11): std::unordered_set, std::unordered_map, std::unordered_multiset, std::unordered_multimap.
  • Container Adapters: std::stack, std::queue, std::priority_queue (provide specific interfaces built on other containers).
  • Algorithms: Functions that perform operations on sequences of elements, often provided by containers. Examples: searching (std::find), sorting (std::sort), modifying (std::transform), counting (std::count), numeric operations (std::accumulate). Found primarily in <algorithm> and <numeric>.
  • Iterators: Objects that act like pointers, providing a way to access elements within containers (and other sequences) sequentially. They connect algorithms with containers.
  • Function Objects (Functors) & Lambdas: Objects that can be called like functions (overloading operator()). Used heavily with algorithms. C++11 lambdas provide a concise way to create anonymous function objects inline.

2. Input/Output Streams Library (<iostream>, <fstream>, <sstream>)

Section titled “2. Input/Output Streams Library (<iostream>, <fstream>, <sstream>)”

Provides classes for handling input and output operations:

  • std::cin: Standard input stream (usually keyboard).
  • std::cout: Standard output stream (usually console).
  • std::cerr: Standard error stream (unbuffered).
  • std::clog: Standard error stream (buffered).
  • std::ifstream: Input file stream.
  • std::ofstream: Output file stream.
  • std::fstream: File stream for both input and output.
  • std::istringstream: Input string stream (read from a string).
  • std::ostringstream: Output string stream (write to a string).
  • std::stringstream: String stream for both input and output.

3. String Handling (<string>, <string_view>)

Section titled “3. String Handling (<string>, <string_view>)”

Provides classes for working with sequences of characters:

  • std::string: A dynamic character string class offering numerous manipulation functions.
  • std::string_view (C++17): A non-owning, lightweight view of a character sequence. Useful for passing string data efficiently without copying.

A collection of various useful components:

  • <utility>: Includes std::pair, std::move, std::forward, comparison operators.
  • <memory>: Smart pointers (std::unique_ptr, std::shared_ptr, std::weak_ptr), allocators.
  • <functional>: Function wrappers (std::function), function objects, std::bind.
  • <chrono> (C++11): Date and time utilities.
  • <tuple> (C++11): Fixed-size collection of heterogeneous values.
  • <optional> (C++17): Represents an optional contained value.
  • <variant> (C++17): Type-safe union.
  • <any> (C++17): Type-safe container for single values of any type.
  • <type_traits> (C++11): Compile-time type information querying and manipulation.

5. Numerics Library (<cmath>, <complex>, <random>, <numeric>)

Section titled “5. Numerics Library (<cmath>, <complex>, <random>, <numeric>)”

Provides mathematical functions, complex numbers, random number generation, and numeric algorithms.

  • <cmath>: C-style mathematical functions (sin, cos, sqrt, etc.).
  • <complex>: Complex number class template.
  • <random> (C++11): Advanced random number generation facilities.
  • <numeric>: Numeric algorithms like accumulate, inner_product.

6. Concurrency Support Library (C++11 onwards)

Section titled “6. Concurrency Support Library (C++11 onwards)”

Provides tools for multithreaded programming:

  • <thread>: Class for launching and managing threads.
  • <mutex>: Mutexes for protecting shared data (std::mutex, std::recursive_mutex, etc.).
  • <shared_mutex> (C++14): Shared (reader-writer) mutexes.
  • <condition_variable>: Condition variables for thread synchronization.
  • <atomic>: Atomic types for lock-free programming.
  • <future>, <promise>: Tools for asynchronous operations.

Provides classes and functions for manipulating files and directories in a platform-independent way (<filesystem>).

Includes fundamental language features like type support (<limits>, <typeinfo>), exception handling (<exception>), and dynamic memory management (<new>).

The C++ Standard Library includes the functionality of the C Standard Library. C headers like <stdio.h>, <stdlib.h>, <string.h>, <math.h> are available, but the preferred C++ way is to use the corresponding <cHEADER> versions (e.g., <cstdio>, <cstdlib>, <cstring>, <cmath>) which place the C library functions within the std namespace.

Using the library involves including the appropriate header file (e.g., #include <vector>) and often using the std namespace (e.g., std::vector<int> myVector; or using a using declaration/directive).