Standard Template Library
lastmod 2021-11-05created 2019-08-215 edits
The Standard Template Library (STL) is a library for C++ that influenced many parts of the C++ Standard Library. It provides four components called algorithms, containers, functors, and iterators.
The STL provides a ready-made set of common classes for C++, such as containers and associative arrays, that can be used with any built-in type and with any user-defined type. STL algorithms are independent of containers, which significantly reduced the complexity of the library.
The STL achieves its results through the use of templates. This approach provides compile-time polymorphism that is often far more efficient than traditional run-time polymorphism. Modern C++ compilers are tuned to minimize any abstraction penalty arising from heavy use of the STL.
The STL was created as the first library of generic algorithms and data structures for C++. It is based on four ideas: generic programming, abstraction without loss of efficiency, the Von Neumann architecture, and value semantics.
Algorithms
The header <algorithm> defines a collection of functions especially designed to be used on ranges of elements.
A range is any sequence of objects that can be accessed through iterators or pointers, such as an array or an instance of some of the STL containers. Notice though, that algorithms operate through iterators directly on the values, not affecting in any way the structure of any possible container (it never affects the size or storage allocation of the container).
Non-modifying sequence operations
- all_of: Test condition on all elements in range
- any_of: Test if any element in range fulfills condition
- none_of: Test if no elements fulfill condition
- for_each: Apply function to range
- find: Find value in range
- find_if: Find element in range
- find_if_not: Find element in range (negative condition)
- find_end: Find last subsequence in range
- find_first_of: Find element from set in range
- adjacent_find: Find equal adjacent elements in range
- count: Count appearances of value in range
- count_if: Return number of elements in range satisfying condition
- mismatch: Return first position where two ranges differ
- equal: Test whether the elements in two ranges are equal
- is_permutation: Test whether range is permutation of another
- search: Search range for subsequence
- search_n: Search range for elements
Modifying sequence operations
- copy: Copy range of elements
- copy_n: Copy elements
- copy_if: Copy certain elements of range
- copy_backward: Copy range of elements backward
- move: Move range of elements
- move_backward: Move range of elements backward
- swap: Exchange values of two objects
- swap_ranges: Exchange values of two ranges
- iter_swap: Exchange values of objects pointed by two iterators
- transform: Transform range
- replace: Replace value in range
- replace_if: Replace values in range
- replace_copy: Copy range replacing value
- replace_copy_if: Copy range replacing value
- fill: Fill range with value
- fill_n: Fill sequence with value
- generate: Generate values for range with function
- generate_n: Generate values for sequence with function
- remove: Remove value from range
- remove_if: Remove elements from range
- remove_copy: Copy range removing value
- remove_copy_if: Copy range removing values
- unique: Remove consecutive duplicates in range
- unique_copy: Copy range removing duplicates
- reverse: Reverse range
- reverse_copy: Copy range reversed
- rotate: Rotate left the elements in range
- rotate_copy: Copy range rotated left
- random_shuffle: Randomly rearrange elements in range
- shuffle: Randomly rearrange elements in range using generator
Partitions
- is_partitioned: Test whether range is partitioned
- partition: Partition range in two
- stable_partition: Partition range in two - stable ordering
- partition_copy: Partition range into two
- partition_point: Get partition point
Sorting
- sort: Sort elements in range
- stable_sort: Sort elements preserving order of equivalents
- partial_sort: Partially sort elements in range
- partial_sort_copy: Copy and partially sort range
- is_sorted: Check whether range is sorted
- is_sorted_until: Find first unsorted element in range
- nth_element: Sort element in range
Binary search (operating on partitioned/sorted ranges)
- lower_bound: Return iterator to lower bound
- upper_bound: Return iterator to upper bound
- equal_range: Get subrange of equal elements
- binary_search: Test if value exists in sorted sequence
Merge (operating on sorted ranges)
- merge: Merge sorted ranges
- inplace_merge: Merge consecutive sorted ranges
- includes: Test whether sorted range includes another sorted range
- set_union: Union of two sorted ranges
- set_intersection: Intersection of two sorted ranges
- set_difference: Difference of two sorted ranges
- set_symmetric_difference: Symmetric difference of two sorted ranges
Heap
- push_heap: Push element into heap range
- pop_heap: Pop element from heap range
- make_heap: Make heap from range
- sort_heap: Sort elements of heap
- is_heap: Test if range is heap
- is_heap_until: Find first element not in heap order
Min/max
- min: Return the smallest
- max: Return the largest
- minmax: Return smallest and largest elements
- min_element: Return smallest element in range
- max_element: Return largest element in range
- minmax_element: Return smallest and largest elements in range
Other
- lexicographical_compare: Lexicographical less-than comparison
- next_permutation: Transform range to next permutation
- prev_permutation: Transform range to previous permutation
See also
Favorite site
- Wikipedia (en) Standard Template Library
- Hanbit Media About STL : C++ STL Programming (4) - Vector 1
References
-
About_stl-cpp_stl_programming.pdf ↩