C++ Standard Library:
In the C++ programming language, the C++ Standard
Library is a collection of classes and functions, which are written in the core
language and part of the C++ ISO Standard itself.The C++ Standard Library provides several generic containers, functions to
utilize and manipulate these containers, function objects, generic strings and
streams (including interactive and file I/O), support for some language
features, and functions for everyday tasks such as finding the square root
of a number. The C++ Standard Library also incorporates 18 headers of the ISO C90
C standard library ending with ".h", but their use is deprecated. No
other headers in the C++ Standard Library end in ".h". Features of
the C++ Standard Library are declared within the std namespace.
The C++ Standard Library is based upon conventions
introduced by the Standard Template Library (STL), and has been influenced by
research in generic programming and developers of the STL such as Alexander
Stepanov and Meng Lee. Although the C++ Standard Library and the STL
share many features, neither is a strict superset of the other.
A noteworthy feature of the C++ Standard Library is that
it not only specifies the syntax and semantics of generic algorithms, but also
places requirements on their performance. These performance requirements often
correspond to a well-known algorithm, which is expected but not required to be
used. In most cases this requires linear time O(n) or linearithmic time
O(n log n), but in some cases higher bounds are
allowed, such as quasilinear time O(n log2 n) for stable sort (to allow in-place merge sort). Previously sorting was only required to take O(n log n) on average, allowing the use of quicksort, which is fast in practice but has poor worst-case performance, but introsort was introduced to allow both fast average performance and optimal worst-case complexity, and as of C++11, sorting is guaranteed to be at worst linearithmic. In other cases requirements remain laxer, such as selection, which is only required to be linear on average (as in quick select), not requiring worst-case linear as in introselect.
allowed, such as quasilinear time O(n log2 n) for stable sort (to allow in-place merge sort). Previously sorting was only required to take O(n log n) on average, allowing the use of quicksort, which is fast in practice but has poor worst-case performance, but introsort was introduced to allow both fast average performance and optimal worst-case complexity, and as of C++11, sorting is guaranteed to be at worst linearithmic. In other cases requirements remain laxer, such as selection, which is only required to be linear on average (as in quick select), not requiring worst-case linear as in introselect.
The C++ Standard Library underwent ISO standardization as
part of the C++ ISO Standardization effort, and is undergoing further work
regarding standardization of expanded functionality.
std::list:
std::list is a
container that supports constant time insertion and removal of elements from
anywhere in the container. Fast random access is not supported. It is usually
implemented as a doubly-linked list. Compared to std::forward_list this container provides
bidirectional iteration capability while being less space efficient.
Addition, removal
and moving the elements within the list or across several lists does not
invalidate the iterators or references. An iterator is invalidated only when
the corresponding element is deleted.
std::list meets the requirements of Container, Al locator Aware Container, Sequence Container and Reversible Container.
Template parameters
-
|
The type of the
elements.
|
||||
Allocator
|
-
|
An allocator
that is used to acquire/release memory and to construct/destroy the elements
in that memory. The type must meet the requirements of Allocator. The behavior is undefined if Allocator::value_type
is not the same as T.
|
Member types
Member type
|
Definition
|
|||
value_type
|
T
|
|||
allocator_type
|
Allocator
|
|||
size_type
|
Unsigned
integer type (usually std::size_t)
|
|||
difference_type
|
Signed integer
type (usually std::ptrdiff_t)
|
|||
reference
|
|
|||
const_reference
|
|
|||
pointer
|
|
|||
const_pointer
|
|
|||
iterator
|
BidirectionalIterator
|
|||
const_iterator
|
Constant
bidirectional iterator
|
|||
reverse_iterator
|
std::reverse_iterator<iterator>
|
|||
const_reverse_iterator
|
std::reverse_iterator<const_iterator>
|
Member functions
(constructor)
|
constructs the list
(public member function) |
(destructor)
|
destructs the list
(public member function) |
operator=
|
assigns values
to the container
(public member function) |
assign
|
assigns values
to the container
(public member function) |
get_allocator
|
returns the
associated allocator
(public member function) |
Element access
|
|
front
|
access the
first element
(public member function) |
back
|
access the last
element
(public member function) |
Iterators
|
|
begin cbegin
|
returns an
iterator to the beginning
(public member function) |
end cend
|
returns an
iterator to the end
(public member function) |
rbegin crbegin
|
returns a
reverse iterator to the beginning
(public member function) |
rend crend
|
returns a
reverse iterator to the end
(public member function) |
Capacity
|
|
empty
|
checks whether
the container is empty
(public member function) |
size
|
returns the
number of elements
(public member function) |
max_size
|
returns the
maximum possible number of elements
(public member function) |
Modifiers
|
|
clear
|
clears the
contents
(public member function) |
insert
|
inserts
elements
(public member function) |
emplace
|
constructs
element in-place
(public member function) |
erase
|
erases elements
(public member function) |
push_back
|
adds an element
to the end
(public member function) |
emplace_back
|
constructs an
element in-place at the end
(public member function) |
pop_back
|
removes the
last element
(public member function) |
push_front
|
inserts an
element to the beginning
(public member function) |
emplace_front
|
constructs an
element in-place at the beginning
(public member function) |
pop_front
|
removes the
first element
(public member function) |
resize
|
changes the
number of elements stored
(public member function) |
swap
|
swaps the
contents
(public member function) |
Operations
|
|
merge
|
merges two
sorted lists
(public member function) |
splice
|
moves elements
from another list
(public member function) |
removeremove_if
|
removes
elements satisfying specific criteria
(public member function) |
reverse
|
reverses the
order of the elements
(public member function) |
unique
|
removes
consecutive duplicate elements
(public member function) |
sort
|
sorts the
elements
(public member function) |
Non-member functions
operator==operator!=operator<operator<=operator>operator>=
|
lexicographically
compares the values in the list
(function template) |
std::swap(std::list)
|
specializes the
std::swap algorithm
(function template) |
Example
Run this code
#include
<algorithm>
#include
<iostream>
#include
<list>
int
main()
{
// Create a list containing integers
std::list<int> l = { 7, 5, 16, 8 };
// Add an integer to the front of the list
l.push_front(25);
// Add an integer to the back of the list
l.push_back(13);
// Insert an integer before 16 by searching
auto it = std::find(l.begin(), l.end(), 16);
if (it != l.end()) {
l.insert(it, 42);
}
// Iterate and print values of the list
for (int n : l) {
std::cout << n << '\n';
}
}
Output:
25
7
5
42
16
8
13